器件型号: CC2340R5
您好、
当我通过读取/写入在外部闪存中进行压力测试时、遇到了 SPI DMA 传输问题。
测试流程如下所示:
while (1) {
//adc check vbat and thermistor
//ble scan(work as observer) and store to flash
//sleep 10s
}
在存储到闪存期间、函数调用如下:
NVS_write ()、带有标志 NVS_write_pre_verify -> NVSSPI25X_write ()-> doWriteVerify ()-> doRead ()-> extFlashSpiRead ()-> SPI_TRANSFER ()-> SPILPF3DMA_TRANSFER ()
由于 SPILPF3DMA_hwAttrs.minDmaTransferSize =10 和 doRead () 将读取 256 个字节,因此它将使用 DMA 进行传输。
当问题发生时、MCU 发送 SPI 读取命令、但它没有创建任何 SPI CLK 来从外部闪存读取数据、如下所示:
(对不起,我不知道为什么我不能在这里 uplaod 的图片,也许我可以尝试在 commet 上 uplaod )
我们尝试调试它,我们发现,当这个问题发生时,它也运行到函数 primeTransfer() 并执行下面的代码,但没有任何 SPI 的 CLK 发生:
if (!object->manualStart)
{
enableSPI(handle);
/* Enable DMA to generate interrupt on SPI peripheral */
enableDMA(hwAttrs->baseAddr, SPI_DMACR_TXEN | SPI_DMACR_RXEN);
UDMALPF3_channelEnable(hwAttrs->rxChannelBitMask | hwAttrs->txChannelBitMask);
}
更多信息:
1.我们使用 SDK simplelink_lowpower_f3_SDK_8_40_02_01
2.发生问题时,轮询中的 SPI 发送工作正常,但 DMA 始终发送失败
3.在失败情况下调试时、执行 enableDMA (hwAttrs->baseAddr、SPI_DMACR_TXEN | SPI_DMACR_RXEN) 后、DMA 的寄存器 REQDONE 为 0x00000000、但在正常情况下、该寄存器为 0x00000001。 我不确定此信息是否有帮助。
请帮助检查它,我们感谢您的任何免费回复。
BR、
Edwin