自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(174)
  • 资源 (3)
  • 收藏
  • 关注

原创 【GCC警告&报错7】error: a label can only be part of a statement and a declaration is not a statement

本文讨论了C语言中一个常见的编译警告——'a label can only be part of a statement and a declaration is not a statement'。内容解释了该警告的原因,源于C99之前的规定,并提供了两种修改方法:将声明移至标签前或在声明前插入语句以消除警告。作者建议遵循最佳实践,将定义置于标签之前,以避免可能的生命周期问题导致的代码错误。

2025-04-03 23:38:55 8

原创 【GCC警告&报错6】warning: comparison of unsigned expression < 0 is always false [-Wtype-limits]

本文探讨了在C/C++编程中遇到的GCC编译警告'comparison of unsigned expression < 0 is always false [-Wtype-limits]'。作者通过一个实例解释了这种警告产生的原因,即在无符号类型数值与0进行小于比较时,由于无符号数不可能为负,因此比较始终为假。文章强调了理解数据类型的特性以及正确使用它们的重要性。

2025-04-03 23:36:51 38

原创 【GCC警告&报错5】warning: suggest parentheses around assignment used as truth value [-Wparentheses]

文章介绍了GCC编译器发出的'warning: suggest parentheses around assignment used as truth value [-Wparentheses]'警告,强调了在C/C++编程中,应避免将赋值操作直接用作条件表达式,而应使用括号明确表达意图,以避免潜在的逻辑错误。

2025-04-03 23:35:40 8

原创 【GCC警告&报错4】warning: format not a string literal and no format arguments

本文介绍了GCC编译时遇到的警告:format not a string literal and no format arguments的原因,该问题源于使用snprintf函数时未提供格式化字符串。正确用法应包含占位符,如snprintf(buf1, LEN_BUF, "%s", buf)。" 111637760,10295928,使用Python PyQt5自制安全照片浏览器,"['Python', 'GUI开发', 'PyQt5', '图像处理']

2025-04-03 23:31:55 104

原创 【GCC警告&报错3】warning: ‘xxx‘ may be used uninitialized in this function [-Wmaybe-uninitialized]

本文介绍了在使用GCC编译器时遇到的'xxx'可能未初始化的警告,重点关注了在C++和C语言中,特别是在ARM开发环境下,交叉编译链可能出现的该问题。内容包括警告的原因分析以及解决策略。

2025-04-03 23:28:49 39

原创 【GCC警告&报错2】warning: missing braces around initializer [-Wmissing-braces]

本文介绍了C语言中出现'warning: missing braces around initializer'警告的原因,包括未正确使用大括号初始化数组元素。提供了解决这种警告的正确初始化语法,并讨论了不同编译器对此的处理差异。同时提到了结构体数组初始化的注意事项和 memset 在初始化中的应用。

2025-04-03 23:26:26 117

原创 【GCC警告&报错1】warning: initialization makes pointer from integer without a cast

本文介绍了C语言编译时出现的警告:将整数初始化为指针类型而没有进行类型转换。文章指出,直接将整型赋值给指针可能导致编译错误或地址问题,应使用强制类型转换。举例说明了正确做法,并提醒在使用如malloc的内存分配函数时,注意指针类型的强制转换。

2025-04-03 23:24:04 79

原创 黑猫带你学Nand第12篇:什么是NandFlash的Program Disturb & Pass disturb & Edge disturb?

在之前的章节中,我们知道了nand write的原理,此处不再赘述。用下面一张图1,表示program disturb和pass disturb。其实就能明白什么叫做program disturb和pass disturb了。图1WL3上同时存在不需要编程的Cell,比如说(BL1 WL3)的Cell。但是因为WL3增加了20V的高电压,所以会导致其他不被编程的cell也受到高压影响,然后导致电子进入浮栅中,形成弱编程。这些不需要被编程的cell称为program-inhibit cell。

2025-03-22 19:53:43 59

原创 黑猫带你学UFS协议第23篇:UFS固件升级操作详解(FFU)

FFU就是更新ufs内部的固件。相较于emmc的FFU,从协议角度,ufs的FFU更加简单。使用write buffer命令(mode = 0Eh)把FW bin download到ufs,然后进行power cycle/HW reset就好了。

2025-03-21 20:11:05 57

原创 黑猫带你学Nand第11篇:万字长文带你了解NandFlash的数据保持原理及特性(Data Retention)

TATTAT:Trap-assistedtunneling,陷阱辅助隧穿,也有叫法称为电荷陷阱现象。这是一种物理现象,它发生在非挥发性存储器,如NAND闪存。在这种效应中,存储在闪存单元浮动栅极上的电荷(电子)由于隧道氧化物中捕获的电荷形成的电场影响,导致电荷通过隧道效应从一个能级隧穿到另一个能级,从而造成电荷泄漏。这种电荷泄漏是导致闪存数据保持问题的主要原因之一,因为它可以改变存储在闪存单元中的电荷量,进而改变其阈值电压水平,最终可能导致数据错误。在NANDFlash中,电荷被存储在浮置栅极上。

2025-01-19 20:05:36 192

原创 黑猫带你学Nand第10篇:万字长文带你了解NandFlash的读干扰原理及特性(Read Disturb)

读干扰。即read page时候,会导致同BLK中的其他page产生干扰,导致数据出错。读干扰会发生在与待读取page同一Block中的所有其他page的cell上。1、想要知道read disturb原理,需要首先要先理解nand flash的存储原理。如图所示:其标识nand的一个cell,是一个浮栅MOS管,floating gate被绝缘体包围,内部可以储存电子,避免流失。同时,还需要知道,nand在物理上的结构如下图所示。形成了bit line、word line的结构。

2024-12-08 19:54:56 362

原创 黑猫带你学eMMC协议第32篇:eMMC什么场景下会出现ADDRESS_ OUT_OF_RANGE(OOR)

read last lba,device有概率置位oor,host忽略即可。原因截图解释:不过,虽然spec中规定如上,但是实际很多厂商处理的时候,还是会较真这种情况下的OOR处理。如下提供了一种厂商实现的方案:比如read到full card 的最后一个sector时候,如果clk一直有提供给emmc,fw也不要再吐数据给host了。cmd12发送比较慢,那么此时就认为是下一个sector的数据要传输的时间了,此时OOR还是要在cmd12的resp置位。

2024-11-16 18:56:11 185

原创 黑猫带你学Nand第9篇:超全的NandFlash命令详解,值得一读!

此文章主要表明nand的每个命令的基本作用及主要命令的一些规则。更多详细知识点,由于实在太多,使用时候查看spec即可,此处不一一列出。

2024-11-03 23:38:10 226

原创 黑猫带你学Nand第8篇:NandFlash的供电情况详解

是指在任何工作条件下,设备允许的最大电压、电流、功率以及温度等参数的界限值。

2024-08-25 08:10:23 476

原创 黑猫详解【UFS M-PHY】第1篇:MIPI M-PHY基础知识

M-PHY是一个串行通信协议。体系结构M-PHY的基本单元是1ane(信道),它既可以是一个发射器(M-TX),也可以是一个接收器(M-RX)。每个lane被视为一个独立单元,拥有自己的配置和数据接口。一个lane管理器(与协议适配器关联)负责控制线路状态(活动/非活动);当多个1ane被聚合,用以提高吞吐量时,它负责管理时钟补偿和1ane校准。一条由上下行子链路构成的链路负责处理芯片间通信。每条子链路可以聚合一个或多个1anes,用于创建一对M-TX/M-RX。

2024-02-29 22:52:59 1390

原创 黑猫带你学Nand第7篇:NandFlash写操作详解

编程(写入)操作(programming operation)是用来将数据从cache寄存器或data寄存器搬运到一个或多个plane中。在编程操作中,cache和data寄存器中的数据内容会被内部控制逻辑修改

2024-02-20 08:24:40 653

原创 黑猫带你学Nand第2篇:NandFlash部分相关名词释义

本文为本人工作学习中常听到或常用到关乎于nandflash/fw的一些关键词合集,没有固定分类,不需要强行记忆,供查询使用。

2024-02-18 20:38:09 435

原创 黑猫带你学Nand第5篇:NandFlash的封装与引脚定义

ONFI5.1中规定nand封装尺寸有以下几种LGA52为什么不同的封装,会导致nand支持不同的data interface?封装尺寸和设计:不同的封装类型(如TSOP、WSOP、LGA、BGA等)具有不同的尺寸和设计,这可能影响可用的引脚数量和布局,进而影响支持的接口类型。电气特性:封装的电气特性,如信号完整性、阻抗匹配和电源管理,对高速数据传输至关重要。不同的封装可能具有不同的电气特性,从而影响对不同数据接口的支持。

2024-02-18 19:41:44 1376

原创 黑猫带你学eMMC协议第31篇:什么是eMMC的驱动强度(Drive Strength)

首先要清楚:内阻越大,驱动强度越小;内阻越小,驱动强度越大。ECSD[185]可调节DS(drive strength), 是所有eMMC的基本功能,一般厂商样片都是可调的。当emmc使用在一些平台上,出现CRC的问题时候,可以考虑调整驱动强度。相关寄存器只读,表示emmc是否支持调节驱动强度及支持的强度等级。bit7-bit4用来调节驱动强度。驱动强度修改影响的总线有哪些?这个驱动强度会调节整个IO的驱动,也就是包括emmc的cmd、data、ds pin。

2023-12-04 21:36:13 2380 2

原创 黑猫带你学Nand第3篇:NandFlash介质工作原理,你想要的都在这里!

1、nand组成的cell是什么?什么原理用来存储电荷?2、NAND Flash存储单元组织结构是什么样子的?3、nand的读写擦的本质原理是什么?4、program前必须erase的本质原因。

2023-11-22 08:59:00 939 3

原创 黑猫带你学Nand第6篇:NandFlash寻址(行列地址和block/page/LUN之间的关系)

稍微了解一点nand的朋友都知道,nand是由一个一个MOSFET(cell)组成,形成一个阵列结构,同时为了方便管理nand的这些cell,划分了lun、block、page等区域。下面两张图相信大家都是有见过的。个人认为,只要搞清楚上述讲解的几个周期的含义,就一定能搞懂行列地址和block、page、LUN之间的公式,反而这些公式让人不知所云。首先发送的是列地址,其次发送的是行地址。注意,SLC和TLC的寻址方式还不一样:TLC的page address是12bit的,SLC的是10bit的。

2023-11-05 17:14:54 1297

原创 黑猫带你学eMMC协议第30篇:eMMC的boot mode和boot operation详解

boot operation是干嘛的?boot operation期间,将boot区域的数据全部吐出来。如果emmc用在手机里面,吐出来的这些数据用于启动手机,也就是说boot区域已经提前放置了安卓系统等信息。boot operation也可以从uda吐数据,但是emmc的init过程很长,所以放在boot area就可以很快速将这些数据给出来。这也就是为什么手机电源键一按,屏幕等设备就会快速工作起来。流程框图如图所示,按照蓝紫色箭头标注出来的流程就是boot operation的流程。

2023-08-21 00:32:26 1717 4

原创 黑猫带你学Nand第4篇:NandFlash结构详解

相信对于初学者,看到CE/LUN/DIE/PLANE/BLOCK/PAGE/CELL这些名词的时候,傻傻分不清,笔者当年才学习flash的时候,也一直对于这些名词处于一个混沌状态。后来仔细查阅资料,才终于搞明白。先来看图:Target/CE:在一个nand芯片中,共享CE引脚的多个LUN,成为Target。有多个LUN的时候,通过CE引脚来决定操作哪个LUN。LUN/Die:LUN:logical unit number,即逻辑单元。其别名就是Die。所以,Die就表示LUN。

2023-06-24 18:55:02 2143

原创 黑猫带你学eMMC协议第29篇:eMMC设备锁详解(CMD42)

通过cmd42命令,可以给emmc设置密码,并且锁定emmc。这时候就不能对emmc的user分区进行读写数据访问了。设备锁在V4.3版本后的emmc里面,就只能保护user area分区,因此,被锁定的emmc,依旧可以正常访问BOOT\RPMB\GPP分区。emmc内部有128 bit PWD寄存器,用来存放密码,以及有8bit PWD_LEN寄存器,用来密码长度。这两个寄存器非易失性,掉电也不会丢失。

2023-05-02 17:49:01 2594

原创 黑猫带你学eMMC协议第28篇:eMMC的开漏和推挽模式(push-pull & open drain)

RDAT和RCMD是上拉寄存器,当设备驱动都处于高阻抗模式时,用来保护CMD和DATA免受过大的浮动。host打开/关闭ROD用来控制push-pull/open drain mode。对于XU4平台,应该是设置CTRL register的ENABLE_OD_PULLUP字段用来控制ROD是打开还是关闭。如果有一个稳定的电流(包括稳定的上升沿和下降沿),那就可以代替RCMD达到一个更好的性能。如果host没办法控制RCD,固定的RCMD可以被利用起来。因此,如果RCMD的电阻大于给出的最小工作值,那

2023-03-04 10:52:01 1548 1

原创 黑猫带你学UFS协议第7篇:UFS传输层(UTP)简介

SCSI体系结构模型[SAM]用作UTP的通用体系结构模型,SAM任务管理功能用于任务管理。SAM模型就是客户端-服务器模型,或者说是请求-响应模型。这种客户端-服务器模型就是客户端发送请求,服务端响应的一个过程。

2023-01-23 11:32:26 2469

原创 黑猫带你学UFS协议第3篇:UFS简介

速率模式:UFS强制支持HS-G1 ~ HS-G4使用ufs的产品:手机、汽车、UMPC, DSC, PMP, MP3、相机供电情况:VCCQ power supply: 1.2 V (nominal)VCCQ2 power supply: 1.8 V (nominal)VCC power supply: 2.5 V/3.3 V (nominal)UFS层级:(1)UFS Command Set Layer (UCS)基于SBC和SPC的简单SCSI命令集。(2)UFS Tran

2023-01-22 22:52:38 3993 4

原创 黑猫带你学UFS协议第6篇:UFS链路层简介(MIPI UNIPRO)

T_CO_SAPs:Cports和T_CO_SAPs的关系:CPorts可以被看做UniPro T_CO_SAP的实例。DME:Device Management Entity,设备管理实体EOM:SOM:MTU:Maximum Transmission Unit,最大传输单元。MTU其实就是在每一个节点的管控值,只要是大于这个值的数据帧,要么选择分片,要么直接丢弃。从数据层面来说,UFS的UTP层和UniPro的通信是通过UniPro的传输层的CPorts端口的原语来实现。

2023-01-22 18:24:49 2367

原创 黑猫带你学UFS协议第5篇:UFS物理层简介(MIPI M-PHY)

M-RX应包括可切换的差分终端。默认情况下,M-RX终止必须在PWM-Burst状态下关闭,并可以打开适当的MIPI属性。由于不支持未终止的HS-BURST,因此在HS‐BURST状态下,默认情况下应打开终止。SLEEP和STALL状态不进行终止。在DISABLE and HIBERNATE states,M‐TX驱动High‐Z(高阻态),而M‐RX通过“Dif‐Z保持器”终止通道。

2023-01-22 17:51:42 3843

原创 黑猫带你学UFS协议第22篇:全网最全UFS RPMB LU详解(重放保护逻辑单元)

全文约14500字,主要内容有:1、什么是UFS 的RPMB LU?2、为什么叫做RPMB?什么又是重放攻击?3、如何对RPMB LU进行读写、密钥编程等操作?4、对RPMB区域操作又有哪些限制、规则?4、ufs的RPMB LU和emmc的RPMB partition有什么异同?

2022-12-25 21:17:47 2059 2

原创 黑猫详解【UFS HCI】第2篇:UFS HCI register详解

host软件设置对应bit为0,用来向host controller表示请求传输的命令槽将被释放。host软件置1,表示host端准备好去执行某个请求了,主机软件通过将此字段中的相关位设置为“0”来指示请求插槽没有更改。host软件置1,表示host端准备好去执行某个task请求了,主机软件通过将此字段中的相关位设置为“0”来指示请求插槽没有更改。host软件将UTMRLRSR的值从1变为0,那么这个字段的值将会被清零。host软件将UTRLRSR的值从1变为0,那么这个字段的值将会被清零。

2022-11-20 11:44:52 1273

原创 黑猫带你学UFS协议第19篇:UFS语境管理详解(context management)

为了更好地区别大的顺序操作和小的随机操作,并提高多任务支持,可将语境与读或写关联。将一组命令与一个语境关联,使得设备能够优化数据的处理。多个读或写命令与此语境关联,就在它们之间创建出某种逻辑关系,以便设备优化性能。通俗来说,通过context管理,进行多块读写的时候,ufs的性能有一定的优化。至于为什么会优化,该怎么优化,这就是fw的事情了。

2022-11-20 11:25:34 1126

原创 黑猫详解【UFS Unipro】第1篇:Unipro协议框架详解

UniPro规范适用于广泛的设备类型,如应用程序处理器、co-处理器、调制解调器、存储子系统,包括非易失性内存模块、显示器、相机传感器、3D图形和多媒体加速器。它还适用于不同类型的数据流量,如控制消息、批量数据传输和分组流。MIPI UniPro是一个成熟的通用接口,易于实现、可在传统模块化设备架构中灵活使用,适合满足并应对移动和其他行业不断增长的需求。UniPro充当UFS的数据链路层,负责host和device的连接。UniPro不仅定义了数据链路层,它本是也是一个比较完整的协议栈。

2022-11-06 11:01:23 2845

原创 黑猫带你学UFS协议第14篇:什么是逻辑单元(LU)与逻辑块(Sector)

我们对与UFS、emmc一类存储芯片,最重要的功能是什么?无非就是存数据和取出数据,也就是读写功能。既然要存取数据,那么就需要考虑数据往哪里存放,就像我们住房,买了床会放在卧室,买了厨具会放在厨房。同样的道理,emmc/ufs内部也划分了有很多“房间”,这些“房间”在emmc里面叫做分区,在ufs里面叫做逻辑单元。在emmc里面有user/rpmb/boot/gpp分区的概念,把emmc的空间划分为多个区域。

2022-10-23 21:18:36 2278

原创 黑猫带你学UFS协议第12篇:UFS标志(Flags)和属性(Atrributes)详解

UFS中的标志其实就是一些开关,布尔型,非0即1,打开或者关闭。这些标志可以用来使能或者禁止UFS设备的一些功能、模式或者状态。简单来说,flag和attribute、discriptor一样,都是ufs的寄存器罢了。只不过spec将这些寄存器分类了,分成这三种大的类型了而已。标志可以被清除、复位、设置、触发、读。主机也是通过设备管理器的Query Request UPIU来读取或者写标志。

2022-10-15 17:17:04 1582 3

原创 黑猫详解【UFS Unipro】第2篇:Power States & Power Modes详解

了解power mode之前先要知道:一个是功率模式,一个是功率状态,不要搞混了!UniPro定义了六种功率模式,它们是从底层PHY提供的功率模式中抽象出来的功率模式。UniPro在所有模式下,每个方向最多支持4个PHY信道。未使用的信道保持HIBERNATE_STATE状态。未连接的信道保持OFF_STATE状态。能够实现所有功率模式中最高的数据传输速率。链接总是随时准备发送和接收数据,同时提供一个定义良好的延迟,这是任何UniPro功率模式中最低的。

2022-10-03 21:46:38 1972 1

原创 黑猫带你学UFS协议第21篇:UFS命令队列详解(CMDQ)

UFS设备可以实现以下两种队列架构中的一种:(1)独立于任务集,用于对任务进行排队的资源可以静态分配给每个LU,以便LU能够对新任务进行一定深度的排队(2)也可以由所有LU共享,以便根据接收到的任务将排队资源动态分配给LU。...

2022-08-30 00:30:00 2337

原创 黑猫详解【UFS HCI】第1篇:UFSHCI系统框架介绍

Host Controller Interface (HCI),也叫做UFSHCI,本文中统一使用HCI。根据其名字也能大概知道这是什么意思:主机控制器接口。其作用就是为ufs提供一个统一的硬件接口,方便host cotroller使用统一的驱动。简单来说,ufs被应用到不同的平台设备中,这些不同的平台设备如何与ufs进行交互?通过HCI这种统一的硬件接口与ufs通信。不同的厂商生产的平台设备就要遵守HCI,才能和ufs通信,这样,一来能减少各种硬件接口不同导致的问题,二来软件驱动又能兼容。...

2022-08-29 00:51:32 1833 1

原创 黑猫带你学UFS协议第20篇:UFS cache详解

UFS cache是一个临时的存储空间,用来提高host读写的访问时间。例如host如果写数据到flash中需要很长时间,而host下发的数据写到ufs的cache中就很快了。这样ufs内部自己可以再从cache中将数据搬移到flash中。此时host就可以去干自己的事情了,不需要等待UFS把数据再写入flash中。对于读同理,提前把数据放到cache中,当要读数据的时候,host直接从cache中拿即可,访问时间大大加快。host不能直接访问UFS的cache。

2022-08-21 14:31:57 1674 2

原创 黑猫详解【UFS Unipro】第3篇:DME reset详解

三种reset:这三种reset对于Unipro来说是强制的。Cold Reset和Warm Reset会对host和device的整个UniPro stack中的L1.5至L4层都有影响,包括相应的属性。UniPro Cold Reset or UniPro Warm Reset进程结束时,UniPro Link是不使能的,要么进入Off State(DME_POWEROFF.req),要么进入Boot程序被发起(DME_ENABLE.req)。...

2022-08-14 23:00:48 1402 2

eMMC 5.1协议规范(JESD84-B51)

Jedec官方eMMC 5.1协议规范

2021-08-22

ripard-dmaengine.pdf

ripard-dmaengine.pdf

2021-07-11

Linux DMA from User Space-public.pdf

Linux DMA from User Space-public.pdf

2021-07-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除