QSPI是Queued SPI的简写,是Motorola公司推出的SPI接口的扩展。QUADSPI是一种专用的通信接口,连接单、双或四(条数据线)SPI Flash 存储介质 主要特性:
0
|
|
|
|
工作模式: 单线 SPI 模式 双线 SPI 模式 四线 SPI 模式 SDR 模式 DDR 模式 双闪存模式 从原理图上看,板子上的QSPI: 那么接下来,就来看一下程序了。
|
|
|
|
|
在main函数的while中只调用了一个函数
查看原代码
while(1)
{
/* Execute the code from QSPI memory ------------------------------------ */
GpioToggle();
}
而这个函数GpioToggle();的定义如下所示:
查看原代码
#if defined(__CC_ARM)
#pragma arm section code = ".qspi"
#pragma no_inline
static void GpioToggle(void)
#elif defined(__ICCARM__)
static void GpioToggle(void) @ ".qspi"
#elif defined(__GNUC__)
static void __attribute__((section(".qspi"), noinline)) GpioToggle(void)
#endif
{
BSP_LED_Toggle(LED1);
/* Insert delay 100 ms */
HAL_Delay(100);
}
#if defined(__CC_ARM)
#pragma arm section code
#endif
由于我们使用的是Keil,所以__CC_ARM是有效的。
|
|
|
|
|
那么最后函数的定义为
查看原代码
#pragma arm section code = ".qspi"
#pragma no_inline
static void GpioToggle(void)
{
BSP_LED_Toggle(LED1);
/* Insert delay 100 ms */
HAL_Delay(100);
}
#pragma arm section code
即是将GpioToggle函数定义在了QSPI的存储器中。
|
|
|
|
|
下面对工程进行编译后,查看map文件,可以看到GpioToggle函数的地址是0x90000001。 从手册中查找到,0x90000001的地址是映射到了QSPI上的。
|
|
|
|
|
Queued SPI与Quad SPI的关系始终没搞明白,希望有人指点迷津。如楼主所言,Queued SPI是SPI接口的扩展,QUAD SPI是一种专用的通信接口(有单、双、四线工作模式),恕我有点混乱。。。
|
|
|
|
|
Queued SPI和QUAD SPI是有区别的,Queued SPI看moto的手册,里面只有din和dout 2条数据线,quad spi是4条数据线
--------------------
我读书少不要骗我
|
|
|
|
|