
针对您在使用TRAVEO™ II CYT4BF MCU时遇到的SPI时钟拉伸和数据丢失问题(在5 MHz波特率下传输4 KB数据时出现),以下是系统性解决方案:
DMA与SPI FIFO速度不匹配
总线仲裁延迟
中断延迟
FIFO阈值配置不当
// 使用32位宽突发传输(假设SPI数据为8位)
Cy_DMA_Descriptor_SetDataSize(&descriptor, CY_DMA_BURST_TRANSFER_X4); // 4*32位突发
Cy_DMA_Descriptor_SetSrcTransferSize(&descriptor, CY_DMA_TRANSFER_SIZE_DATA_WORD); // 32位源
Cy_DMA_Descriptor_SetDstTransferSize(&descriptor, CY_DMA_TRANSFER_SIZE_DATA_WORD); // 32位目标 Cy_DMA_Channel_SetPriority(dmaChannel, 3); // 最高优先级(0-3) Cy_SCB_SPI_SetTxFifoLevel(SCB10_HW, 2); // 当FIFO≤2空位时触发DMA请求 #pragma __attribute__((section(".cy_ram0"))) // 使用TCM SRAM
uint8_t txBuffer[4096]; Cy_DMA_Descriptor_SetNextDescriptor(&descriptor, &descriptor); // 循环指向自身
Cy_DMA_Channel_Enable(descriptor.channel);(80e6 / (2 * 5e6)) - 1 = 7:Cy_SCB_SPI_SetBaudRate(SCB10_HW, 5000000, periClkFreq); if (Cy_SCB_SPI_GetTxFifoStatus(SCB10_HW) & CY_SCB_SPI_TX_UNDERFLOW) {
// 处理下溢错误
}
关键提示:若问题仅在5 MHz出现,根本原因通常是DMA/FIFO时序裕量不足。通过降低FIFO阈值 + 32位突发DMA + TCM内存组合方案可解决95%以上类似问题。
若仍存在问题,请提供:
举报
更多回帖