器件型号: TMS320F28P650SK
我在非 FIFO 轮询模式下使用 SPIA 将 S25FL128L SPI 闪存与 TI F28P650SK6PZPR 器件连接在一起。
当前观察结果:
- SCLK 正在正确切换
- MOSI 正在正确传输数据
- CS 切换正确
- 在闪存 SO/MISO 引脚上未观察到响应
SPIRXBUF始终读取0x0000SPISTS.INT_FLAG0x0040在传输后变为置位 ()、并在读取 RX 缓冲区后清零- SPI 模式配置为模式 0
- RESET#和 WP#引脚保持高电平
我0x9F使用以下命令对 JEDEC ID 命令 () 进行了测试:
GPIO_writePin (GPIO_PIN_SPIA_PTE、0);
SPI_transmitByte (SPIA_BASE、0x9F);
ID1 = SPI_transmitByte (SPIA_BASE、0x00);
ID2 = SPI_transmitByte (SPIA_BASE、0x00);
ID3 = SPI_transmitByte (SPIA_BASE、0x00);
GPIO_writePin (GPIO_PIN_SPIA_PTE、1);
SPI 传递函数:
SPI_pollingNonFIFOTransaction (base、8U、txData);
其他意见:
- 示波器上显示了 SCLK 和 MOSI 波形
- 在 FLASH SO 引脚上未观察到波形
- CS 时序显示正确
- SPI 波特率当前为 10MHz
SPIDAT并SPIRXBUF保持为 0。
此外、在0x9F直接测试 JEDEC ID () 命令之前、我使用了以下 SPI 交换函数进行闪存通信、但没有收到有效数据。
SPI2_Status_TypeDef SPI2_Exchange1(uint8_t *pTransmitData,
uint8_t *pReceiveData,
uint16_t timeout)
{
uint32_t tick = 0;
uint16_t txData = (uint16_t)(*pTransmitData) << 8;
uint16_t rxData = 0;
uint16_t time_out = 0;
uint32_t base = SPIA_BASE;
while ((HWREGH(base + SPI_O_STS) & SPI_STS_INT_FLAG) != 0) {
if (++time_out >= SPI_TIMEOUT_COUNT) {
return SPI2_ERROR;
}
}
SPI_writeDataNonBlocking(mySPI0_BASE, txData);
tick = 0;
time_out = 0;
while ((HWREGH(base + SPI_O_STS) & SPI_STS_INT_FLAG) == 0) {
if (++time_out >= SPI_TIMEOUT_COUNT) {
return SPI2_ERROR;
}
}
rxData = SPI_readDataNonBlocking(mySPI0_BASE);
*pReceiveData = (uint8_t)(rxData & 0xFF);
return SPI2_OK;
}
由于使用该函数没有收到有效的响应,我简化了测试并直接尝试使用命令读取 JEDEC ID 0x9F,但仍然没有在 MISO/so 行上观察到响应。
什么可能导致闪存器件即使时钟、MOSI 和 CS 处于活动状态、也无法驱动 MISO/SO 线路?


