|
楼主 |
发表于 2020-12-4 11:34:45
|
显示全部楼层
目前更改SPI速度,分频,没有得到解决。
PS:附件显示太大,不能上传,工程打包,放在百度网盘:
链接:https://pan.baidu.com/s/1Vp7qAjpl3BbZbTJwAebaNg
提取码:0gqk
复制这段内容后打开百度网盘手机App,操作更方便哦
使用HAL库官方自带的SPI DMA 全双工工程,MDK工程。更改读取W25Q128:
W25QXX底层驱动拉取:https://github.com/nimaltd/w25qxx
我只更改了W25Q的read 函数,测试读取效果,可以独立出来,并不影响。其他函数并没有修改(readID,write等)
向W25Q中写数据测试,可以用另外工程写入,或者在这个工程修改。由于我的W25Q之前有写入数据,所以,直接测试read函数就可以。
//=========================================================//
目前问题:
说明:
1、不加DMA,read函数读取数据正常,小规模数据/大批量数据皆正常
2、添加DMA,如果添加 while (wTransferState == TRANSFER_WAIT)判断DMA执行完成,
在回调函数 HAL_SPI_TxRxCpltCallback中清状态wTransferState = TRANSFER_COMPLETE;
则会卡死在 while (wTransferState == TRANSFER_WAIT),说明就没进回调函数
已测试过。
3、添加DMA,不加 while (wTransferState == TRANSFER_WAIT)状态判断,
可以读取数据,但是读取的数据量不大,如果整块整块批量读取,读取数据丢失或者无
已测试过。
4、
CS引脚拉高放在read函数内: 读取数据失败
读取到的数据为:
0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
读取完数据,将CS引脚拉高。如果放在read函数内,则数据读取失败,
//-------------------------------------------------------------------
CS引脚拉高放在DMA回调函数内:读取数据正常
读取到的数据为:
0x00,0xD0,0xD0,0xBB,0xC4,0xFA,0xD1,0xA1,
0xD3,0xC3,0xD2,0xB0,0xBB,0xF0,0x73,0x74,
0x6D,0x33,0x32,0xBF,0xAA,0xB7,0xA2,0xB0,
读取完数据,由于不知道DMA什么时候读取完成,所以将CS引脚拉高放在DMA完成的回调函数内执行
已测试过。
数据测试:
读取W25Q内的数据:
非DMA模式。读取到如下:
感谢使用用安富莱stm32开发板 http://www.armbbs.cn
pname 2 22 = LSB6060wen.bin
pname 2 22 = LSBniao60.bin
pname 2 22 = MSBniao60.bin
pname 2 22 = LSBback4040.bin
pname 2 22 = LSBdown4060.bin
pname 2 22 = LSBup4060.bin
pname 2 22 = LSBfolder6060.bin
pname = LSBfile6060.bin size = 20000
DMA模式读取到的数据为:
感谢使用用安富莱stm32开发板 http://www.armbbs.cn
name = LSBfile6060.bin size = 0
信息能读到(感谢使用用安富莱stm32。。。。。)
而其他数据,则没有读取到(name = LSBfile6060.bin size = 0)
|
|