[转]uboot中SPI Flash Booting配置
转自:https://e2echina.ti.com/question_answer/dsp_arm/sitara_arm/f/25/t/124834
最近和人一起调试SPI FLASH的配置问题,做个小结记录,也方便后续人员开发的时候来使用。考虑到物料的多元性,目前的需求是使用不同品牌的SPI flash,是否都可以通过相同的image来启动。答案是可以的,但是需要在原始的SDK中加以改动。
在AM335x的Linux UBOOT的配置流程中,主要涉及到了两点:一是关于SPI的pinmux定义,还有一个就是SPI flash对应的driver。下面让我们以SDK7.0为例,先看看SPI FLASH的关键参数点在哪里配置。
1. SPI的pinmux定义
在board/ti/am335x/mux.c文件的如下函数中
void enable_board_pin_mux(struct am335x_baseboard_id *header)
当板卡为GPEVM板,且PROFILE设置为2的情况下才会使能的便是对SPI0的SPI FLASH的管教配置使能。如果需要使能SPI FLASH,可以直接在这里把相关条件判断去掉,直接使能即可。
- configure_module_pin_mux(spi0_pin_mux);
2. SPI FLASH driver的配置。
这个部分的修改,涉及到有人使用的是SPANSION的,有人用的是WINBOND的,不同的SPI FLASH在配置上参数是略有差异的,所以driver中会通过读取SPI FLASH的相关ID,从而进一步进行驱动的配置。
这部分的使能,我们是直接在include/configs/am335x_evm.h头文件定义中,通过相关宏定义来控制的。
例如,我们的GEPVM板上使用的是WINBOND的,所以配置文件的宏定义中通过
“#define CONFIG_SPI_FLASH_WINBOND”进行了相关的设定。
让我们更进一步,明确这个部分是如何工作的,track到这个宏定义生效的地方:
drivers/mtd/spi/sf_probe.c文件中,事实上,这个宏定义主要是决定了下面这个参数表里的内容:static const struct spi_flash_params spi_flash_params_table[]
这个参数表是通过manufacture ID和device ID来确认当前flash的型号和配置参数。
例如,如果是使用的WINBON的W25Q80 FLASH,其flash手册如下
AM335x在driver probe的时候,便会根据读取到的 EF + 4014就是上面的倒数第二行配置来进行SPI FALSH的参数,从而使能WINBOND的W25Q80。从而完成对flash的配置。
所以要是使用的flash型号可以被正常识别,只要保证了你的flash配置在这个表里面有对应的ID和参数信息即可。
于是,若是即准备用SPANSION的flash又打算用WINBOND的,或者是其他品牌的,只要将对应的宏定义释放开就可以了。简单暴力点的就是把宏定义的限制去除掉完事儿咯。
综上,调试SPI flash booing的时候保证两点:
- Pinmux的配置要正常使能;
- 确保你的SPI型号的参数配置在参数配置表中即可。