uboot 增加不同型号的 nor-flash 调试笔记

举报
小麦大叔 发表于 2021/12/04 00:56:51 2021/12/04
【摘要】 之前我自己设计了一个板子,用的spi-flash的型号是w25q128,后面为了验证一个问题,买了一块方案验证板子,上面flash的型号是xt25f128b,于是,我将之前编译好的固件直接烧录进去就出现了...

之前我自己设计了一个板子,用的spi-flash的型号是w25q128,后面为了验证一个问题,买了一块方案验证板子,上面flash的型号是xt25f128b,于是,我将之前编译好的固件直接烧录进去就出现了问题,终端打印的错误信息如下:
unrecognized JEDEC id bytes: 0b, 40, 18

具体如下图所示:
错误信息
根据报错信息,我开始漫漫调试之旅,首先在U-boot的源码下进行查找打印日志的位置,发现在spi_flash.c919行,有相应的输出,具体如下图所示;

这里打开spi_flash.c可以看到;

从代码中可以看出,这段程序试图在 spi_flash_ids 这个数组中查找是否有和板载 flash 对应的 id
于是我就尝试找到这个数组;


可以看到,在spi_flash_ids.c46行,出现了 spi_flash_ids 这个数组的定义,打开这个文件;


找到了定义相应falsh型号,id,容量等信息,只需要将板子上的flash相应信息填入到这个数组就行了。

看了一下INFO这个宏定义:

/* Used when the "_ext_id" is two bytes at most */
#define INFO(_jedec_id, _ext_id, _sector_size, _n_sectors, _flags)    \
        .id = {                         \
            ...
        .id_len = (!(_jedec_id) ? 0 : (3 + ((_ext_id) ? 2 : 0))),   \
        .sector_size = (_sector_size),              \
        .n_sectors = (_n_sectors),              \
        .page_size = 256,                   \
        .flags = (_flags),

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

重新回头看一下前面的报错信息,提示是JEDEC id无法识别,那下面简单看一下什么是JEDEC id?


什么是JEDEC?
JEDEC是针对Nor flash的一种标准,另外一种标准是CFI
JEDEC:全称是Joint Electron Device Engineering Council 即电子元件工业联合会。

JEDEC是由生产厂商们制定的国际性协议,主要为内存制定;
用来帮助程序读取Flash的制造商ID和设备ID,以确定Flash的大小和算法,如果芯片不支持CFI,就需使用JEDEC了。
工业标准的内存通常指的是符合JEDEC标准的一组内存。

板子上的flash型号是xt25f128b,在datasheet中找到flash的id,确实也是 0x0b4018

因为这个flash和w25q128fw相似,因此我直接复制,然后修改了id,具体如下图所示;

重新编译了u-boot,将固件烧录到flash中,这次成功启动,并且能识别到相应的spi-flash;具体如下图所示;

不过这个时候,还没有修改kernel里的设备树设置:

参考:
https://zhuanlan.zhihu.com/p/76221655
https://github.com/thirtythreeforty/businesscard-linux/issues/11

文章来源: great.blog.csdn.net,作者:小麦大叔,版权归原作者所有,如需转载,请联系作者。

原文链接:great.blog.csdn.net/article/details/117752714

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。