[AT32F415] SPI读取24位数据发生了数据颠倒

[复制链接]
2728|21
 楼主| 1109346714 发表于 2022-10-19 16:11 | 显示全部楼层 |阅读模式
我用SPI读取一个24位的数据,8位8位的读取,读取三次。正常读取出来的数据顺序应该是ABC,我用示波器抓了,波形就是ABC。但是我读取出来的数据却是CAB。这不是最奇怪的,当我只从寄存器取一次数据的时候,我第一个字节读出来的就是A;当我从寄存器取2次数据的时候,第一个字节读出来的就是B;当我从寄存器读三个字节的时候,第一个字节就是C。奇怪的是,当我读第一个字节的时候,系统是怎么知道我后面还是否会继续读取数据,从而给我不同的数据的呢?
读取三个字节:
37023634fb0b16343d.png
读取两个字节:
77645634fb0ecdc13c.png
读取一个字节:
93257634fb1157eeba.png
LcwSwust 发表于 2022-10-19 17:34 | 显示全部楼层
CAB不是颠倒而是错位,你看 CAB CAB CAB,如果去掉前面第一个C,那后面就是ABC ABC
 楼主| 1109346714 发表于 2022-10-19 17:45 | 显示全部楼层
找到问题了,问题在于前面,我下发数据后,并没有将缓存区的数据取出,我在一个博客中看见SPI在每次写数据后也依然要将寄存器中的数据读出,哪怕是没用的。在我将前面写数据后的寄存器值读出来丢掉后,后面的数据就是正常顺序的了。
 楼主| 1109346714 发表于 2022-10-19 17:45 | 显示全部楼层
LcwSwust 发表于 2022-10-19 17:34
CAB不是颠倒而是错位,你看 CAB CAB CAB,如果去掉前面第一个C,那后面就是ABC ABC  ...

嗯,我发现是前面数据有一部分并没有被我读出导致的。导致后面的数据都错位了
icecut 发表于 2022-10-19 19:59 | 显示全部楼层
实验不是错. 代码不严格的实验,就是自己挖坑自己跳
zerorobert 发表于 2022-11-2 17:49 | 显示全部楼层
spi不都是8位的数据吗              
belindagraham 发表于 2022-11-2 17:59 | 显示全部楼层
解决SPI数据错几位造成数据整体偏移的问题
backlugin 发表于 2022-11-2 18:17 | 显示全部楼层
数据颠倒需要查看是不是数据时序是否正确
phoenixwhite 发表于 2022-11-2 18:45 | 显示全部楼层
SPI数据DMA传输错一个字节?
eefas 发表于 2022-11-2 19:23 | 显示全部楼层
可以检查是否有SPI数据线外接的情况
10299823 发表于 2022-11-2 20:05 | 显示全部楼层
使用示波器测量一下信号是否正确              
janewood 发表于 2022-11-2 20:56 | 显示全部楼层
这个是代码的问题还是硬件的问题呢
kkzz 发表于 2022-11-3 20:31 | 显示全部楼层
这个可以自己移位颠倒数据的              
V853 发表于 2022-11-5 10:14 | 显示全部楼层
SPI硬件设置大小端出问题了?还是传参的顺序出问题了?
朝生 发表于 2022-11-5 10:15 | 显示全部楼层
所以是SPI缓存数据堆积的原因导致的呗。
tpgf 发表于 2022-11-7 10:28 | 显示全部楼层
是不是数据的高端和低端的配置或者读取顺序出现问题了呢
heimaojingzhang 发表于 2022-11-7 10:39 | 显示全部楼层
SPI数据错几位,造成数据整体偏移。比如传0x5555,就有可能变长0xaaaa。
keaibukelian 发表于 2022-11-7 11:38 | 显示全部楼层
 软件模式时每次接收之前写入0,完成接收之后写入1,就可以实现软件片选,这个操作可以放在软件模式下的外部中断,或者DMA数据流中断中都可以,为的是清空SPI中的数据寄存器,让其重新开始,把之前寄存器接收到的垃圾(比如残留的1位数据待在SPI-DR之中),还有一个隐含的操作,当只有把SSI写入1时才能正确的清掉各种标志
labasi 发表于 2022-11-7 11:52 | 显示全部楼层
本帖最后由 labasi 于 2022-11-7 13:30 编辑

不清楚这个问题
paotangsan 发表于 2022-11-7 12:05 | 显示全部楼层
有时遇到的是接收到的首字节错了并非发送的值,并且可能依次偏移。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部