这两天在做SPI_DMA实验时遇到个问题, 检查了代码,不知道是何原因。 请大神门看看,万分感谢。
实验箱:STC32G12K128实验箱9.62
代码:以STC32G官方库文件包中独立项目20 “串口发指令通过高速SPI访问Flash芯片”实例为基础修改, 修改为串口接收到十六进制指令后,操作Flash相应的操作。 再参考官方试验箱例程包62 ”DMA-SPI与存储器自动收发”中实例,在代码中添加了DMA方式传输。 通过打开或屏蔽自己写的myW25Qxx.h中的定义W25Qxx_SPI_DMA字段 来切换使用硬件SPI方式或硬件SPI_DMA方式传输数据。
问题: 当使用硬件SPI时读取数据正常; 但使用DMA方式传输时,读取数据时第一字节数据有误,需再读取一次才正确, 当更换地址后,第一次读取,第一个字节会时更换地址前读取数据的第一个字节内容, 再读取一次新地址数据,数据才会正常。
读取数据方式,串口发送十六进制数据 读命令 | 地址 | 数据大小 0x52 0x00 0x00 0xA0 0x00 0x00 0x05 读取地址为0xA000开始的5个字节数据
Flash芯片中原来数据 地址 5个数据 0xA000 :0xD2 ,0x32, 0xD3, 0x32, 0xD3 0xA100 :0x0F ,0x22, 0x0F , 0x22, 0x0F
使用硬件SPI传输方式: 接收的数据正常。
使用DMA传输时 需发送两次命令才能读取到正确数据,每次改变地址时,第一次读取数据的第一字节会是之前地址的数据。
完整代码请见附件。
|