海思HI3518E增加 SPI flash支持
程序员文章站
2024-02-23 22:34:46
...
由于项目需求,需要在hi3518e的板子上增加型号为 MX25L6406E 8M的SPI Flash,驱动本身没有这个型号的支持,
所以需要修改uboot和kernel代码,具体是参考《基于Hifmcv100控制器的Flash移植指南》手册进行的,不过因为
没有做过这个,所以很多参数也不是怎么理解,搞了一天总算没问题了,有不对的也请各位指出。
1.首先是uboot的修改
查阅 MX25L6406E 的器件手册,找到设备的ID号,应该都是在9F命令那里,以及设备的总大小、块大小、地址模式
(3byte或4byte)、设备支持的读写模式类型(标准读写、快速读写、多线读写之类的以及各种模式下的时钟是多少),
找到这些信息之后,找到**uboot的drivers/mtd/spi/hifmc100下的hifmc_spi_nor_ids.c**文件,再找里面的
**static struct spi_nor_info hifmc_spi_nor_info_table[]** 添加节点的参数。具体参数意义参考海思的手册,
我这好像只能使用标准读写的方式,虽然手册说别的方式也支持,但是加上去会报错,所以就只加了标准的读写方式,
我的参数如下:
因为这个型号的ID和mx25l6436f这个是一样的,但是工作时钟不一样,为了避免其他问题,我就直接把不用的mx25l6436f屏蔽了,后面的kernel也一样。
2.kernel的修改
在drivers/mtd/spi-nor/spi-nor.c里面找到 **static const struct flash_info spi_nor_ids[]** 添加节点的
地方,这里要和uboot一致,不然好像会出错。我的参数配置如下:
本来有用PARAMS(mxic), CLK_MHZ_2X(84)这两个参数的,但是加上去报错,就去掉了,也是瞎摸出来
才知道的,不清楚为什么报错。配置的读写方式需要和uboot的一样,不然会挂载不了文件系统,原因不知。
之前有调一段时间,但是uboot读取不到设备ID,就没有再管了,现在又提了上来,重新焊了一个flash,结果就一下子读到了ID,之前估计是焊的有些随意,出了问题。