最近参加的RTT的活动的项目需要用到外部flash,简单调了调发现即使有着生成工具,也没那么开箱即用。记录下踩坑历史
硬件连接
我使用SPI模式连接NorFlash,仅连接了MISO、MOSI、SCK和CS分别到P202、P203、P204和P207。WP和HD均拉高。
RASC部分配置
在RASC中Stack页New Stack选Connectivity-SPI(r_spi),将Callback改为spi0_callback,SPI Mode改为SPI Operation,将Enable Support for using DTC设为Disabled。
RTT中的SPI device的CS似乎都是软件控制的,所以我们需要在Pin页中把SPI的CS脚去掉,也就是把SSLAx都设为None。然后选到我们的CS脚P207,初始化为Output mode(Initial High),IO速度选成High
RTT部分配置
在RT-Thread Settings里面,硬件页打开Enable SPI BUS - Enable SPI0 BUS
组件页打开使用SPI总线、设备驱动程序 - 使用串行Flash通用驱动程序(SFUD)以及下面的分选项
代码部分
由于RTT只给我生成好了一个SPI BUS设备,并不能直接用于作为读取Flash的SPI。我们需要创建一个SPI Device,在这里我命名为了spspi。
static struct rt_spi_device sfud_dev;
uint32_t cs_pin = BSP_IO_PORT_02_PIN_07;
rt_hw_spi_device_attach(&sfud_dev, "sfspi", "spi0", (void *)cs_pin);
实现效果
编译下载后在msh中应该就能通过调用sf probe sfspi发现一个flash了。
msh >sf probe sfspi
[D/SFUD] (../rt-thread/components/drivers/spi/sfud/src/sfud.c:861) The flash device manufacturer ID is 0xA1, memory type ID is 0x31, ca
... some logs ...
[I/SFUD] Find a Fudan flash chip. Size is 131072 bytes.
[D/SFUD] (../rt-thread/components/drivers/spi/sfud/src/sfud.c:840) Flash device reset success.
[I/SFUD] sf_cmd flash device is initialize success.
[I/SFUD] Probe SPI flash sf_cmd by SPI device sfspi success.
128 KB sf_cmd is current selected device.
原作者:宝宝A
|