NFC cdma 封装设计

匿名 (未验证) 提交于 2019-12-03 00:26:01

功能

本模块接收NFC逻辑命令并将其封装成NFC HAL命令再下发到对应硬件命令(CDMA)通道并发执行并回收。

本模块主要功能如下:

从上层模块获取NFC CMD命令,封装成硬件能够识别的命令

NFC硬件支持4CH 4CE;每个CH提供了8个CDMA FIFO,软件为了提高并行度,也对应设计成数目一致的软件通路,每个通路抽象成bank的概念,总共32个。

软件对Bank的执行顺序可配置,即:CH,CE的优先顺序可以根据它们的构成来决定如何配置,通常情况下,CH优先的性能是最优的。


nfc_cdma_pack_t结构体

结构体active_cmd_t



结构体rrtry_raid_t

ppa_idx :LPPA中的ppa idx

offset:表示当前cdma在LPPA中的lpa offset

Data_buf: 用以区分构造SG表

ldpc_info :对应描述符中CTRL info 中的LDPC info

bm_info:对应描述符中CTRL info 中的BM info

pseudo :对应描述符中CTRL info 中的pseudo info

rrtry_raid_info :对应描述符中CTRL info 中的raid info/ RRTRY info

CDMA CMD封装规则

根据NFC_CMD 进行不同类型的cdma_cmd fmt,每一个CDMA_cmd fmt 成一个 Descriptor,种类区分如下:

Erase :__er_cmd_fmt

NFC CMD按照LPPA_PPPA_CNT,直接封装成对应个数的CDMA Descriptor (LPPA_PPPA_CNT依据是否开启multi-plane,Single Plane为1;multi-plane为2), LPA Bitmap默认为All Valid,erase命令必须保证以完整的Page下发下来;根据cmd->is_tlc标记判断是否是TLC block,填充相应的erase SLC/TLC伪指令。

封装结束释放当前active_cmd.

Raid 恢复时读数据出现UECC,用于将UECC数据写回raid,进行XOR,消除无效数据。并约定此命令只有一个raw_ppa大小。

Fmt 前需判断当前strip raid XOR次数(raid_read_op_cnt)是否超过阈值;如果超过则等待strip done后,清除done 信息,把阈值寄存器按照raid_wr_xor_cnt增加。

封装描述符 RTC= OP_RAID_ONLY;data_buf = RAM_ONLY;结束释放当前active_cmd.

因TLC 颗粒特性,一次写3个subpage, 按照LPPA_PPPA_CNT,构造相应个数的cdma_cmd ,开启multiplane时,一个nfc_CMD对应6个CDMA_CMD。

每个cmda LPA Bitmap默认为All Valid。填充相应的wr TLC伪指令。

根据 active_cmd->offset判断是否完成一个LPPA 的Cdma fmt,如果完成 释放active_cmd.

从Raid BUF中读出恢复出的数据,不用构造cdma cmd,先check 当前strip是否完成。如果未完成,则退出等待strip 完成。不释放active_cmd.

如果当前strip完成,只需要把数据从相应的RAIDBUF中copy到SG表地址,释放active_cmd。

在回收NFC_CMD时出现UECC,修改OPType为NFC_RD_RETRY_CMD后再下发CMD,一个NFC CMD会对应数个cdma_cmd,逻辑同normal read, 根据ppa_rr_bmap判断LPPA中的那些PPA需要读做read retry。

做readretry有两种方式:

对于Normal Read,一个NFC CMD对应数个CDMA Descriptor,SLC block,MP最多2个CDMADescriptor ;TLC block 3个subpage, multiplane最多6个CDMA Descriptor。active_cmd->raw_ppa_bmp 决定LPPA中的那些PPA需要读cdma_cmd。

LPA Bitmap由NFC CMD封装时指定,可以部分有效。cdma_cmd->mplane默认为0,不开启硬件multiplane。

如果是raid read, Fmt 前需判断当前strip raid XOR次数(raid_read_op_cnt)是否超过阈值;如果超过则等待strip done后,清除done 信息,把阈值寄存器按照raid_wr_xor_cnt增加。再配置RTC= OP_FLASH_RAID;

1)HOST Read数据走BM通路。填bm_info,SG表只填meta 信息

2)Inner Read 数据到RAM,SG表正常包含main&meta.

3)对于RMWR,NFC CMD中只包含有一个ITL node,NFC端对于读改写不考虑性能,以4KB为操作单元,一个NFC CMD对应一个HAL CMD,不支持multi-plane操作,因此其LPA Bitmap只有一位有效。在将Buffer地址填入到对应的SG 表中,需要根据前端提供LBA Bitmap填入无效的Buffer地址以避免覆盖掉有效Buffer中的部分有效数据,具体操作流程如下:

如果想开发或者学习Nand驱动 Code,请联系QQ:2951105561,有偿购买!


文章来源: NFC cdma 封装设计
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!