ZYNQ-Linux开发之(七)国产化复旦微电子FMQL平台uboot和kernel无法识别国产SPI Flash 芯片以及分区的问题

4 篇文章 5 订阅
2 篇文章 2 订阅

硬件平台资源:

SOC芯片:复旦微电子FMQL45t900

Flash芯片:深圳国微电子的SM25QH256MX 256Mbits SPI Flash存储器

一.确定ubootkernel是否能识别flash芯片

如果新型号的flash芯片无法识别,会出现如下情况:

  1. Uboot无法识别:uboot启动后,在加载内核和根文件系统之前,进入uboot命令行,输入指令:sf probe,回车,如果uboot无法识别该flash芯片,会出现如下打印信息:

如果uboot能够识别该flash芯片,会出现下面的结果:

  1. kernel无法识别,会出现如下现象

首先是Linux系统启动过程中打印信息会提示flash芯片无法识别:

       如果内核能正常识别flash芯片,打印信息是这样的(前提是已经在设备树中添加了QSPI节点的分区信息):

       其次是如果内核不支持flash芯片,Linux系统启动后进入/dev/目录查看设备节点信息,会没有mtd0的节点,结果就会造成烧写EMMC的时候,无法烧写,提示找不到/dev/mtd0的节点。

从上面可以看出,uboot和kernel会分别独立的对spi flash芯片进行初始化,所以,如果需要系统支持一款新的spi flash芯片,需要同时修改uboot和kernel的配置。

二.修改配置uboot,使uboot支持新的flash芯片

1. 通过menuconfig添加spi flash芯片的驱动支持:

(1)cd到SDK目录---设置环境变量---cd到uboot源码目录---输入指令:make menuconfig

会弹出uboot配置界面:

(2)找到对应路径:Device Drivers--->SPI Flash Support--->勾选对应厂家的SPI Flash驱动的支持。

以深圳国微电子的SM25QH256MX 256Mbits SPI Flash为例,因为是国产芯片,所以uboot中并没有对应品牌厂商的驱动支持,但是该型号芯片对标的是国外一款w25q256jve的flash芯片,其厂商是winbond,所以在uboot中勾选上:winbond spi flash support选项,这样uboot启动时,就会将winbond厂商各种型号的驱动也加载进来。

(3)依次点击save---OK---exit---直到退出uboot图形化配置界面。

2. 修在uboot源码,在源码中添加spi flash芯片型号对应的ID号等描述信息

(1)进入到SDK中,找到如下目录中的spi_flash.c文件,双击打开,找到如下函数

这里面我添加了几行打印信息,打印的是uboot启动后读取的spi flash芯片实际的ID值,系统启动后进入uboot指令,输入:sf probe,即可查看,一共是6个值,分为两组,前三个为flash芯片的Manufacture ID,也就是0x010219,后三个为Device ID的值,也就是0x4d0180,或者是0x4d01,具体情况跟芯片的型号有关,同时可以查看芯片手册来确定上面的两个ID的值。

有时候会遇到读出来的两组ID值相同,这个情况下Manufacture ID是:0x206019,Device ID是:0x00,或者查看flash芯片手册确定。

(2)进入到SDK中,找到如下目录中的spi_flash_ids.c文件,双击打开,

找到flash芯片对应厂商名字的宏定义部分,也就是刚才menuconfig中配置的厂商,之前添加的是winbond,在宏定义里面增加对应flash芯片的一些描述信息,例如Manufacture ID,Device ID,容量大小等等,图中红色圈出的。

W25q256jve是flash芯片的名字,按照实际情况写就行,0x206019和0x0是Manufacture ID和Device ID,根据uboot启动读出来的ID值填写就行,或者查询flash手册,后面是flash芯片的一些容量参数,64*1024是每块扇区的大小,一共有512块扇区,总容量是512*64/1024=32MB,根据芯片手册填写即可。

(3)cd到SDK目录,输入如下指令:

出现下面的提示证明uboot编译成功:

新生成的uboot.elf文件在image目录下:

取出用于生成BOOT.bin文件,系统启动时进入uboot命令行,输入指令:sf probe,修改后uboot如果能正常识别flash芯片的话,会有如下打印:

会列出flash芯片的名称,容量大小等。

三.修改配置kernel,使内核支持新的flash芯片

2. 修在kernel源码,在源码中添加spi flash芯片型号对应的ID

(1)进入到SDK,按照如下目录找到spi-nor.c文件,双击打开:

找到对应flash芯片厂商的flash ID的定义部分,在里面添加新的flash芯片的描述信息(和uboot添加差不多)如下所示:

修改后保存。

(2)cd到SDK目录,输入如下指令:

出现下面的提示证明kernel编译成功:

新生成的uImage文件在image目录下:

取出用于系统启动,内核加载成功后,启动过程会打印spi flash芯片初始化成功的信息,同时/dev/目录下也能看到mtd0节点信息,如下所示:

四.修改配置设备树

1. 修改QSPI节点下spi flash芯片的属性名称

找到Procise工程下IAR编译生成的设备树文件夹DeviceTree目录,找到system-top.dts文件,找到qspi节点,将之前的”spansion,s25fl256s1”改为”winbond,w25q256jve”

将修改后的DeviceTree文件夹放入到虚拟机的SDK中进行编译,这样编译出来的设备树文件才能生效。

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Zynq-7000系列之linux开发学习笔记是一系列关于在Zynq7030数据采集板上进行Linux开发的文章。在这些文章中,作者提供了关于编译Linux内核、制作设备树、安装NFS等方面的指导和经验。在其中一篇文章中,作者遇到了在挂载NFS时出现的问题,提示"wrong fs type, bad option, bad superblock"等错误信息。作者还提供了Linux内核源码的下载链接以及开发环境的相关信息。整个学习笔记的目标是让开发板能够连接外网,并通过NFS挂载到虚拟机上运行一个helloworld程序。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Zynq-7000系列之linux开发学习笔记:NFS配置与开发板联网()](https://blog.csdn.net/Claudedy/article/details/94591622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)](https://blog.csdn.net/Claudedy/article/details/90760085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

披着假发的程序唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值