记spi nor flash的调试心得
flash 调试心得
- 前言
- 调试目的
- 调试步骤
- 检查
- 驱动
- flash操作
- 改写
- 复位
- 访问模式
- tips
- 内核下相关
- 文件系统
- nor和nand的区别
前言
在工作中或者在开发板上或多或少都会遇到norflash,现如今spi接口的也是运用的非常广泛。今天我们就来聊一聊在嵌入式设备上调试flash的一些心得。
调试目的
一般flash在嵌入式平台上运用,是用于uboot、内核文件系统以及数据分区的存储。所以在调试flash只需要达到可读可写可擦除,那么一般就说调试OK了,我们一般在uboot下调试flash,因为一般平台上可以通过其他方式比如网络,串口等方式直接下载uboot到ddr中运行,从而进一步调试flash,况且在uboot下调试命令也比较全。
调试步骤
在调试前,一些准备工作先行。
- flash的数据手册准备好
- 平台这边数据手册预备好,假如已在uboot下已经适配的话,驱动部分应该OK可不需要准备。
- 确保硬件通路OK。
检查
拿到pcb查看flash所在位置,观察表面是否有明显磕掉的店电阻电容,以及flash管脚是否有明显虚焊。
驱动
uboot读写norflash使用sf命令,假如你的uboot已经适配了flash控制器驱动,那么可以加打印或者修改sf读取flashid试试。一般假如flash控制器驱动已经适配那么读id是可以读出来的。没有的话先适配uboot的flash控制器驱动。
flash控制器驱动是用于产生flash访问操作的spi波形。驱动适配好了后一般访问spi波形就有了,可以对比数据手册是否符合要求的波形。
纵览几家flash的厂家,他们的寄存器都很相似,一些特定功能的寄存器地址都是一样的,比如软复位寄存器、flash id获取寄存器、状态寄存器等。
一般flash 的id寄存器的9f flash返回3个字节描述flash信息。注意spi访问模式。
flash操作
一般可以读到flash id 说明flashOK,硬件通路也一般OK,但是这时候还是不能操作,比如写或者擦除。
那么接下来几个注意点要说明下。
改写
可以修改uboot的sf命令,让他可以直接读写flash的寄存器
而不仅仅支持读写flash的内容数据。一劳永逸的活。
复位
有些flash上电后不能直接操作flash(写flash),但是可以读flash寄存器以及读flash的内容。之前遇到MACRONIX的flash就出现过这样的现象。
通过设置寄存器软复位就可以进行擦除和写入了。
操作步骤各大flash 都类似,使能rst (0x66) ,软复位(0x99)
访问模式
flash为了提高速度,提供了各种模式。
如图flash的管脚,spi除了标准的cs clk spi的数据管脚为双向而且有4根线。
我们为了快速写入数据到flash采用这个32寄存器进行写入,
写操作选择不同的寄存器表现的模式不同。
假如编程用0x32寄存器,那么cpu这边的spi写入就要4根线一起用,同时flash还要开启使能4线的模式才能用。
假如编程用0x02寄存器那么为单线模式,cpu的数据都走IO0
那么4线模式io数据怎么发送呢?
如图也就是通过4根线2个clk就传送了1个字节。
上面说到,假如采用4先模式发送的话不仅仅cpu端发送数据要4线配合使用发,而且还要flash使能4线的模式。如下图,只要把QEbit位置1,flash就可以使用4线模式
上图可以看出描述是否使能4线模式在status第二个寄存器的S9bit就能知道。
注意:
- 如上图status寄存器的读写是不在同一个寄存器要注意
- QE比特位后面有个note non-volatile writable,这个表示,这个位不是易挥发的,写入一次后掉电他不会丢失的。volatile 表示掉电就恢复默认的。
- qe位一般我们不会在代码里面给置上 ,一般产品生产的时候,利用编程器烧镜像的时候可以顺便把这个bit位给子置上。但我们底层人员需要知道这一点。不然手焊换一块flash发现写不进去了,不急先认识这一点。是不是4线模式没使能。
- 同样编程器烧写的时候有选着3地址模式还是4地址模式,这个是寻址用的,比如大于16MB的地址空间需要4字节模式才能访问,有些flash即使大于16M,出厂默认也是3地址模式,需要编程器或者代码设置成4地址模式才能访问正常,同时cpu控制器要和flash地址模式一致才能正常读用。
tips
- 有条件的直接上逻辑分析仪数据直观
- 没条件上示波器,写flash采用一个a5a5a5a5, 这样假如观测到发现下发的波形短了说明就是发送的不是单线的模式,我就是通过这样查看到cpu那边发送写入的数据是4线的,而flash的配置没有使能4线。
- 还要注意访问的时候是4地址模式还是3地址模式,一般超过16M采用4地址模式,该地址意思是flash存储空间的地址。
内核下相关
文件系统
1. norflash我们一般使用jffs或者jffs2文件系统,是一种日志型文件系统,当分区全部擦除后,内核起来后使用mount挂载
会扫描当前分区所有block,并将每个block的头全部特殊标记
md 0x2008000 0x2000
02080000: 20031985 0000000c e41eb0b1 ffffffff … …
02080010: ffffffff ffffffff ffffffff ffffffff …
02080020: ffffffff ffffffff ffffffff ffffffff …
- 内核源码jffs2.h(include/uapi/linux)定义 0x1985为jffs2的标志
#define JFFS2_OLD_MAGIC_BITMASK 0x1984
#define JFFS2_MAGIC_BITMASK 0x1985
#define KSAMTIB_CIGAM_2SFFJ 0x8519 /* For detecting wrong-endian fs */
#define JFFS2_EMPTY_BITMASK 0xffff
#define JFFS2_DIRTY_BITMASK 0x0000
nor和nand的区别
- nor贵,nand便宜 直接导致nand相比较容量大
- nand读和写都按页操作,而nor读和写都可以按字节来操作
3. nor可直接运行代码,一般存启动相关如bios、uboot
4. nand擦除100w nor 10w次,所以nand一般用于存储数据,U盘emmc等
5. nand擦除快一个blk128k 10ms 写page500us nor 一个blk64k 需要200ms写一个page 0.33ms
记spi nor flash的调试心得相关推荐
- stm32f4 SPI DMA FLASH 传输调试
来源:项目中需要用stm32对外部spi flash(m25p16 2MB)进行快速读取,主要是图像数据. 平台:stm32f407---168MHz,FreeRTOS V7.3.0 主要参考:ht ...
- STM32F10X SPI操作flash MX25L64读写数据
STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自己一 ...
- STM32F10X SPI操作flash MX25L64读写数据(转)
源:STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自 ...
- NXP新出的Cortex-M7核单片机imx.rt1050调试心得
感谢琳的出现,陪我度过开心的每一天.开心的日子总是过得很快,离上次写博客已经快两个月了.历经一年半的阴云密布,终于迎来了久违的万丈阳光,希望未来的岁月带来的是更多美好甜蜜,开心认真过好每一天. 乘着周 ...
- 海思3559U-Boot移植(二):更换新的SPI Nand Flash
前言: 在开发板上的折腾终归是小打小闹,真正的实践还需要从实际项目和自己参考画的板子选的器件入手,记录更换未经SDK包测试过的国产FLASH调试记录和踩到的坑,重点参考SDK文档包下的Releas ...
- 《STM32从零开始学习历程》——SPI读写FLASH
<STM32从零开始学习历程>@EnzoReventon SPI读写FLASH 相关链接: SPI物理层及FLASH芯片介绍 SPI协议层 SPI特性及架构 参考资料: [野火EmbedF ...
- at91sam7s256 linux,at91sam7s64调试心得
at91sam7s64调试心得(作者:gliethttp) 1.光盘上所有at91sam7s64的ads1.2或者IAR程序都没有对全局变量初始化和局部变量清零的代码,所以必须自己加上,内存仿真时不会 ...
- CC2642研究之控制SPI Nand FLASH和EEPROM
接上篇博客,测试蓝牙例程通过后,接下来实现利用CC2642控制板上的SPI接口NAND Flash和EEPROM. 软件:simplelink_cc26x2_sdk_2_30_00_34. 工具:Wi ...
- Flash Builder 找不到所需的Adobe Flash Player调试器版本的解决办法
Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adobe Flash Player调试器版本 解决方法: 1. 进入Flash Builder的安装目录 ...
最新文章
- mysql数据定义语句有哪些_MySQL语法一:数据定义语句 钓鱼翁
- Chrome开发,debug的使用方法。
- 深圳网络推广谈论网站收录后的内容还能不能修改?
- 公司的5GWiFi延迟有多低?来看图体验一下!
- 第八周项目实践6 KMP算法(串的模式匹配)
- 玩转html5画图 - TimeLangoliers - 博客园
- cmd命令快速启动、暂停和关闭sql server服务
- SpringMVC+MyBatis+MySQL实现分页
- erp代码matlab,ERP1 Protocol in Matlab - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...
- C++ 构造函数抛出异常注意事项
- 命令关闭手机蓝牙_iPhone手机这些实用的便捷功能,你知道多少?
- C语言:对包含10个整数的数组进行如下的操作,从下标为0的元素开始到最后一个元素,依次向前移动一个位置。
- c++之find()函数
- 啦啦外卖45.4至尊版全开源独立版源码
- 2022最新MySQL面试题-有详细完整的答案解析
- 怎么关闭苹果Mac桌面出现麦克风图案?
- Very Deep Convolutional Networks for Large-Scale Image Recognition—中英文对照
- 干货 | Trip.com APP QUIC应用和优化实践
- 【电容知识】之【NPO X7R Y5V 电容规格细谈】
- 倍控G30-J4125工控机开箱