打印

GD32F4 spi dma读gd25Q

[复制链接]
2040|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wslwushili|  楼主 | 2022-12-5 14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
demo中是spi 读gd25Q Norflash数据,运行正常,改用dma 方式无法工作。我的代码如下:

void spiflash_dma_config(uint8_t *data)
{
        rcu_periph_clock_enable(RCU_DMA1);
        dma_single_data_parameter_struct spi_dma_init_struct;
        dma_deinit(DMA1,DMA_CH6);       
        spi_dma_init_struct.direction = DMA_PERIPH_TO_MEMORY;
        spi_dma_init_struct.number = 8;
        spi_dma_init_struct.periph_addr = (uint32_t)&SPI_DATA(SPI5);
        spi_dma_init_struct.periph_memory_width = DMA_PERIPH_WIDTH_8BIT;
        spi_dma_init_struct.priority = DMA_PRIORITY_LOW;
        spi_dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
        spi_dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
        spi_dma_init_struct.circular_mode = DMA_CIRCULAR_MODE_DISABLE;
        spi_dma_init_struct.memory0_addr = (uint32_t)data;               
        dma_single_data_mode_init(DMA1,DMA_CH6,&spi_dma_init_struct);
        dma_channel_subperipheral_select(DMA1,DMA_CH6,DMA_SUBPERI1);//接收通道配置
        dma_circulation_disable(DMA1, DMA_CH6);
        dma_channel_disable(DMA1,DMA_CH6);
        spi_dma_disable(SPI5,SPI_DMA_RECEIVE);
}

void spi_flash_dma_read(uint32_t read_addr)
{
     SPI_FLASH_CS_LOW();
    spi_flash_send_byte(READ);
    spi_flash_send_byte((read_addr & 0xFF0000) >> 16);
    spi_flash_send_byte((read_addr& 0xFF00) >> 8);
    spi_flash_send_byte(read_addr & 0xFF);
    dma_channel_enable(DMA1,DMA_CH6);
    spi_dma_enable(SPI5, SPI_DMA_RECEIVE);
    while(dma_flag_get(DMA1,DMA_CH6,DMA_FLAG_FTF)!= SET){}
    dma_flag_clear(DMA1,DMA_CH6,DMA_FLAG_FTF);
    dma_channel_disable(DMA1,DMA_CH6);
    SPI_FLASH_CS_HIGH();
}

main()
{。。。。初始化省略
  spi_flash_init(); //这是demo的
  spiflash_dma_config(my_buf);
  spi_flash_dma_read(0x0c0000);
}
发现一直在 while(dma_flag_get(DMA1,DMA_CH6,DMA_FLAG_FTF)!= SET){}中,求指导,谢谢!

使用特权

评论回复
沙发
wslwushili|  楼主 | 2022-12-11 22:30 | 只看该作者
可以采用DMA发送读命令数据,gd25q才会回数据。

使用特权

评论回复
板凳
earlmax| | 2022-12-12 10:35 | 只看该作者
spi的dma模式没有用过。              

使用特权

评论回复
地板
benjaminka| | 2022-12-12 11:32 | 只看该作者
GD32F4 是有QSPI接口呢?

使用特权

评论回复
5
robincotton| | 2022-12-12 13:11 | 只看该作者
可以使用模拟spi判断是不是硬件的问题。

使用特权

评论回复
6
sesefadou| | 2022-12-12 14:29 | 只看该作者
直接spi读取就行,spi调试简单。

使用特权

评论回复
7
LLGTR| | 2022-12-13 16:59 | 只看该作者
看报错感觉是DMA状态不对,然后死等了。

使用特权

评论回复
8
V853| | 2022-12-13 17:00 | 只看该作者
你看看这个函数检测的是什么寄存器。

使用特权

评论回复
9
芯路例程| | 2022-12-13 17:04 | 只看该作者
用的是官方的例程吗?

使用特权

评论回复
10
MessageRing| | 2022-12-20 18:08 | 只看该作者
是不是DMA配置的问题

使用特权

评论回复
11
sxm1234567| | 2022-12-21 13:36 | 只看该作者
楼主问题解决了吗,我发现SPI速度比STM32的慢好多,也准备用DMA,和你一样卡在这了,可以分享一下吗

使用特权

评论回复
12
Jacquetry| | 2022-12-21 14:41 | 只看该作者
用模拟spi判断是不是硬件的问题

使用特权

评论回复
13
tpgf| | 2023-1-3 09:01 | 只看该作者
我也存在这个问题 使用普通模式没有问题  改用dma就一堆问题

使用特权

评论回复
14
qcliu| | 2023-1-3 09:13 | 只看该作者
看楼主的现象好像是一只在dma状态中等待了

使用特权

评论回复
15
drer| | 2023-1-3 09:23 | 只看该作者
使用dma发送数据和接收数据和普通的模式进行发送接收数据有什么不同的呢

使用特权

评论回复
16
coshi| | 2023-1-3 09:33 | 只看该作者
一般来说 有没有数据显示dma方式下通讯速度能快上多少呢

使用特权

评论回复
17
kxsi| | 2023-1-3 09:42 | 只看该作者
sxm1234567 发表于 2022-12-21 13:36
楼主问题解决了吗,我发现SPI速度比STM32的慢好多,也准备用DMA,和你一样卡在这了,可以分享一下吗 ...

我理解的只是提升了单片机的效率 并不能从根本上解决通讯速率的问题

使用特权

评论回复
18
wiba| | 2023-1-3 10:17 | 只看该作者
可以考虑使用dma进行发送吗  这样有助于效率的提高吗

使用特权

评论回复
19
wwppd| | 2023-1-11 21:48 | 只看该作者
dma太难用了,可能是我不会使用的吧。

使用特权

评论回复
20
minzisc| | 2023-1-12 11:28 | 只看该作者
gd25Q跟w25q有什么不同呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

9

帖子

0

粉丝