前情提要:目前本人正在用ADSP-SC589开发板做开发,希望实现内核与文件系统都从SPI FLASH启动,但板子上原来的SPI FLASH太小了,于是更换了镁光的MT25QU01GBBB FLASH芯片。但是要想使开发板适配新的FLASH,需要对u-boot源码、设备树保存地址、内核保存地址以及文件系统的引导方式进行一定的修改。以下记录修改过程。
开发环境
开发板:ADSP-SC589 EZ-kit;
原有的FLASH芯片:W25Q128FV;
新的FLASH芯片:MT25QU01GBBB;
u-boot版本:经过ADI公司剪裁的u-boot,可在开发板产品页下载。
1 修改u-boot源码
新的FLASH芯片大体上可以与u-boot原来的SPI驱动兼容,但需要修改一下u-boot中的SPI FLASH ID,以使新的芯片可以被识别。
1.1 修改结构体数组spi_flash_params_table[]
结构体数组spi_flash_params_table[]位于uboot源码/driver/mtd/spi/sf_params.c文件下,它定义了u-boot支持的flash芯片的相关信息。
数组中元素的典型格式为
{
"W25Q128BV", 0xef4018, 0x0, 64 * 1024, 256, RD_FULL, WR_QPP | SECT_4K},
"W25Q128BV":代表芯片名称;
0xef4018:前两字节代表芯片的厂商ID,后四字节代表芯片的设备ID;
0x0:代表extend ID;
64 * 1024:代表页的大小;
256:代表页的数量;
RD_FULL:读命令的枚举列表;
WR_QPP | SECT_4K:一些特殊参数。
以上信息一般都可以从芯片手册中找到。
我的MT25QU01GBBB芯片ID为0x20,设备ID为0xBB21,extend ID为0x1040,页大小为64K,页的数量为2048。
为了尽量少改写内容以免出错,我在原有芯片W25Q128FV的信息的基础上进行修改,芯片名与读命令列表、特殊参数保持不变,其余项按照MT25QU01GBBB芯片手册上的内容进行修改,最后得到:
{