功能

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

本模块主要功能如下:

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

设计

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

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

每个bank的执行都由若干执行状态组成,并且在某一时刻所处的阶段相对其他bank都是异步的,

CDMA 模块结构图

图表 1 CDMA 模块结构图

数据结构

nfc_cdma_pack_t结构体

Free_list:cdma_cmdfree 链表

Active_cmd:记录正在pack的nfc_cmd信息,封装结束后释放

free_cnt:free CDMA cnt

raid_read_op_cnt:记录当前strip raid XOR次数(FW以PPA计数)

raid_wr_xor_cnt:记录当前strip WR raid XOR次数(FW以PPA计数)

结构体active_cmd_t

Offset:当前CDMA在LPPA 中的offset

Raw_ppa_bmp: 当前cdma 对应的ppa 在LPPA中bitmap

结构体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,种类区分如下:

1.        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.

2.        Program

a)  __wr_raidxor_cmd_fmt

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.

b)       __tlc_wr_cmd_fmt

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

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

如果是raid WR, 需先check strip done,当前strip未完成,return;当前strip完成 继续pack cdma:normal page  RTC=OP_FLASH_RAID,data_buf=RAM_ONLY,如果为parity page;RTC为OP_FLASH_ONLY,data_buf= RAID_BUF;

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

c)        __slc_wr_cmd_fmt

NFC CMD按照LPPA_PPPA_CNT,直接封装成对应个数的CDMA cdma  LPA Bitmap默认为All Valid。填充相应的wr SLC伪指令。

3.        Read

a)        __rd_parity_cmd_fmt

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

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

b)       __rd_retry_cmd_fmt

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

做readretry有两种方式:

i.             SW RRTRY:构造描述符,set rrtry LVL,做normal read

ii.             Auto CDMA RRTRY:set start offset,构造描述符,填rrtry_info,cdma自动做readretry。

c)        __norm_rd_cmd_fmt

对于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 封装设计相关推荐

  1. Cadence学习记录(三)芯片封装设计

    研读芯片手册 根据芯片手册,确定各边管脚起始坐标以及管脚间距等信息为封装绘制做准备,下图为GD32E230芯片LQFP48封装为例,具体可以将芯片管脚分为4个象限分别对应1.2.3.4: 封装设计软件 ...

  2. Cadence 16.6PCB设计之PCB封装设计笔记

    好记性不如烂笔头,学过的知识就要记下来,否则没过多久就忘得一干二净,又要重新学习.最新使用Allegro的Orcad画了一块板子,并用Allegro设计PCB.为了避免忘记,在此记个笔记吧! 本文使用 ...

  3. allegro 元件封装设计学习

    一.创建普通元件封装 1:建立普通元件焊盘 如电容0805表贴焊盘 文件命名方法:形状+尺寸 如:rectx1_15y1_45 尺寸设计规则: PASTEMASK_TOP(加焊层) 与 BEGIN L ...

  4. PADS-微处理器、USB转UART芯片、MINI-USB PCB封装设计

    目录 1 微处理器PCB封装设计 2 USB转UART芯片PCB封装设计 3 MINI-USB PCB封装设计 4 添加验证 详细步骤不再文字说明,直接截取关键步骤截图 1 微处理器PCB封装设计 查 ...

  5. PCB封装设计实践和文件模板

    在之前的文章 详解AD(Altium Designer 23)中的机械层 - 1.详解AD(Altium Designer 23)中的机械层 - 2 中,我们详细介绍了AD中机械层的相关设置,今天结合 ...

  6. 来自PCBA工厂的忠告,这种PCB封装设计请尽量少做

    作者:一博科技高速先生自媒体成员 王辉东 生活需要仪式感,爱情也亦然. PCBA工程部的张阿强,喜欢供应链的美女梅子好多年. 人送外号张爱梅. 关键是梅子对阿强也很有好感. 她喜欢一有空,就偷瞄阿强那 ...

  7. 网络变压器分类 网络变压器的封装设计

    华强盛电子导读:本文简述网络变压器分类标准及分类,详述网络变压器各封装设计分类及制程 网络变压器分类 网络变压器的封装设计 一,网络变压器分类 1,产品依据结构类型,可以分为两类: a. 离散性网络变 ...

  8. PCB封装设计指导(二)如何阅读Datasheet,找出对应的封装尺寸和信息

    PCB封装设计指导(二)如何阅读Datasheet,找出对应的封装尺寸和信息 所有的封装的建立都是根据Datasheet来建立的,脱离了Datasheet的封装是没有可靠性和保障的. 所以如何看懂Da ...

  9. PADS-电源芯片、晶振、常用接插件PCB封装设计

    目录 1 电源芯片PCB封装设计 2 晶振PCB封装设计 3 接插件排针PCB封装设计 4 Logic添加PCB封装 1 电源芯片PCB封装设计 IPC标准SOT223如下图 无模命令(UMM GD0 ...

最新文章

  1. python网络编程——简单例子
  2. 【LeetCode】字符串 string(共112题)
  3. opencv鼠标操作,画矩形
  4. 【Linux】一步一步学Linux——init命令(138)
  5. 循环斐波那契数列_第五课:斐波那契数列(第一课时)
  6. R 包的安装,使用,更新
  7. PyCharm光标变粗的解决办法
  8. macosx 不允许无名信号量_个人对S12X的协处理器XGATE的信号量semaphore的理解
  9. Tween Animation----Translate位置移动动画
  10. monaco editor + vue的配置
  11. Java多线程系列---“基础篇”08之 join()
  12. 项目:艺龙国内机票实时数据爬虫
  13. 疯狂Java讲义P179单例
  14. pip升级及关于pyecharts安装下载所遇到的问题及部分的解决
  15. 创建加密访问网站,端口443
  16. 威联通qnap SMB速度慢 只有30M、50M的解决方法
  17. 在vscode拉取代码时would clobber existing tag
  18. 有人痴狂,有人跑路,开源软件新一年的冰火两重天
  19. matlab由方波转换为梯形波,matlab怎样将方波转换为二进制数据
  20. P35-前端基础-新闻列表

热门文章

  1. 《C++Primer 中文第四版》 笔记
  2. 如何有效避免项目需求蔓延?
  3. c语言许愿树编程,许愿树(五)
  4. 系统架构设计师-软件水平考试(高级)-理论-计算机网络
  5. Java微信开发入门
  6. 基于国产龙芯 CPU 的气井工业网关研究与设计(一)
  7. 一颗红巨星的最后画面 发出朦胧萤光在星空中绽放
  8. python交通流运行模拟_绘制交通流基本图
  9. 游戏开发那些难念的经
  10. c语言农场,C语言课程设计《开心农场》源码公开