Day3-UFS深入学习路线
UFS
学习链接1:UPUI数据包格式
学习链接2:UPUI数据包详解
学习链接3:UFS电源及低功耗
一、基础准备阶段
1.理解存储技术背景
- 学习NAND Flash基本原理(SLC/MLC/TLC、读写擦除操作、磨损均衡)。
- 对比其他存储协议(eMMC、NVMe、SATA),理解UFS的优势(如高速、低延迟、全双工)。
2.掌握必备基础知识
- 数字电路:熟悉串行通信(MIPI UniPro/M-PHY)、时钟同步、差分信号。
- 协议分层:了解OSI模型或类似分层思想(UFS分应用层、传输层、链路层、物理层)。
- Linux基础:熟悉基本命令和驱动概念(UFS通常在Linux内核中有驱动支持)。
二、协议规范学习
1.官方文档
- JESD220(UFS标准)
- JESD223(UFSHCI,主机控制器接口)
- JESD230(UniPro协议)
- JESD224(M-PHY物理层)
2.核心概念学习
- 协议栈
- 关键特性:Command Queue(多任务并行处理)、Power Management(Active/Idle/Sleep状态切换)、LU(Logical Unit)划分与配置。
三、实践与工具使用
1.仿真与调试工具
- 协议分析仪:Keysight/LeCoy的UFS协议分析工具(捕获物理层信号和协议层数据)
- 逻辑分析仪:抓取M-PHY信号(需支持高速差分信号)
- QEMU模拟器:模拟UFS设备环境(需配置UFS控制器模型)
2.开发板实践
- 购买支持UFS的开发板(如高通/三星的参考板)
- 通过ufs-utils工具读写UFS设备
- 修改Linux内核UFS驱动(如drivers/scsi/ufs)并测试
四、芯片测试
1.芯片手册
2.性能测试:顺序/随机读写速度、延迟(使用fio工具)
C++
学习链接1:1~4命名空间、引用、重载
学习链接2:5~8类和对象
1.命令空间的3种使用方式:
std::cout、using std::cout、using namesapce std
2.实际上 cout 和 cin 分别是 ostream 和 istream 类型的对象,>> 和 <<也涉及运算符重载等知识
3.半省参数需注意顺序,c语言不支持
4.函数重载的3种方式:
参数类型不同、参数个数不同、参数类型顺序不同
5.引用在定义时需初始化,常量引用需使用const,sizeof引用结果为为引用类型的大小,但指针始终是地址空间所占字节个数(通常与int类型相同)
字节对齐
6.C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数,类成员函数的声明和定义放一起会默认为内联函数
类对象空间存储问题:
空类占用1个字节做标识,成员函数不占用类大小
类和对象存储大小
内联函数
枚举和联合
7.类的6个默认成员函数:
默认构造函数只能一个,无参的构造函数和全缺省的构造函数都称为默认构造函数;
默认析构函数不能重载;
默认拷贝构造函数是构造函数的一个重载形式,参数只有一个且必须是类类型对象的引用;
默认赋值运算符重载函数使用 operator操作符(参数列表);
const;
取地址及const取地址操作符重载;
8.静成员态函数没有this指针