GD32F407 SPI DMA问题求助
我打算使用的是GD32F407的芯片,和外部W25Q32通过SPI DMA进行通信,但是就连最基础的读取JEDEC ID也不行,返回的数值都为0。我拿逻辑分析仪测试过W25Q32在读取ID的时候,只有CS的电平有变化,SCK MISO MOSI均没有逻辑电平产生。我也尝试过使用普通SPI模式进行读写,是可以读取到ID号的,且FLASH引脚均有电平产生。实在是不知道问题出在哪里,求大佬们帮忙看下,是不是哪里配置出问题了?代码如附件所示例程里面没有吗? FranklinUNK 发表于 2025-3-20 22:15
例程里面没有吗?
木得 可能是DMA未正确触发SPI发送。
粗略看了下你的程序。你可能对 SPI 的机制理解有错。
SPI的收、发是同时进行的,主机发一个bit的同时也会从从机那里收一个bit,
而不是主机把几个字节说完,从机再说话。
而且,从机不能主动说话,必须由主机发问。
可能是SPI外设的时钟源未配置或未使能。 检查硬件连接。 上逻辑分析仪没 各位大大,这是逻辑分析仪的波形结果(压缩包是完整的波形,金士顿的),很奇怪的是我明明设置了dma_transfer_number_config为1,但是后面还会跟一个数据位,不知道有没有影响,还有05读取status,写使能位一直没被置1
void w25q32_dma_trans(uint16_t size)
{
spi_dma_disable(DMA0, DMA_CH7);;
dma_flag_clear(DMA0, DMA_CH7, DMA_FLAG_FTF);
dma_memory_address_config(DMA0, DMA_CH7, 0,(uint32_t)tx_buffer);
dma_transfer_number_config(DMA0, DMA_CH7, size);
spi_dma_enable(SPI2, SPI_DMA_TRANSMIT);
dma_channel_enable(DMA0, DMA_CH7);
while (dma_flag_get(DMA0, DMA_CH7, DMA_FLAG_FTF) == RESET);
spi_dma_disable(SPI2, SPI_DMA_TRANSMIT);
}
void w25q32_write_enable(void) {
uint8_t cmd = 0x06;
tx_buffer = cmd;
tx_buffer = cmd;
w25q32_cs_low();
w25q32_dma_trans(1);
while(spi_i2s_flag_get(SPI2, SPI_FLAG_TRANS) == SET){};
w25q32_cs_high();
} 并且我有测试过用普通SPI模式是没有问题的
页:
[1]