This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM335x SPI Flash Booting配置指南

Other Parts Discussed in Thread: AM3359

最近和人一起调试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的时候保证两点:

  1. Pinmux的配置要正常使能;
  2. 确保你的SPI型号的参数配置在参数配置表中即可。
PDF格式文件:
  • 你好,我配置了从SPI_FLASH启动,可以正常启动,BOOT程序正常运行,

    另外我想把应用程序也放在SPI_FLASH里,BOOT从SPI_FLASH加载程序到DDR中运行,请问有例程吗?

  • Steven Liu,您好:我正在进行AM3359的Uboot开发,感觉TI官方提供的资料确实比较详细,但分布比较散。有比较完整的介绍uboot移植需要设计哪些方面,怎么流程,怎么调试等各个方面的资料包吗?最好有个例程。