OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4357|回复: 8

传输数据出错!

[复制链接]

48

主题

180

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2016-3-18
在线时间
88 小时
发表于 2016-5-6 12:23:38 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 mengheli 于 2016-5-6 12:31 编辑

我是用ADC采样之后经过DMA传输,608个数据后进入DMA中断,将数据写入U盘,ADC采用触发模式(1us触发一次),写U盘期间不触发,采集的数是16位的,可是现在每隔1024个字节(有时候是512)就会出现错位,也就是512个数!这是为啥!情况如图,因为大小端没设置好,所以存储的高位是16位的高位,例如图片中的第一个数是008A,第二个是0FFF7。采集的是方波,所以数据应该是对齐的,可以看见从第1024个字节起,应该是00几几的地方变成了0F几几。为啥!
QQ图片20160506122111.png

最佳答案

查看完整内容[请看2#楼]

那就是说你定时608个us,采集满608个数据之后你就把这608个数据写进U盘,然后以此往复?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1149
金钱
1149
注册时间
2015-11-13
在线时间
267 小时
发表于 2016-5-6 12:23:39 | 显示全部楼层
那就是说你定时608个us,采集满608个数据之后你就把这608个数据写进U盘,然后以此往复?

回复

使用道具 举报

48

主题

180

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2016-3-18
在线时间
88 小时
 楼主| 发表于 2016-5-6 13:40:51 | 显示全部楼层
已确定写U盘之前就是错的,触发脉冲个数固定,并且脉冲与被采集波对应关系已用示波器反复检查,而且采集的数据总量没有错,也就是AD部分没有问题,剩下的就是DMA部分了。因为是512或者1024个字节出错一次,所以会不会是传输的数据块或者内存不对?请问怎么设置
回复

使用道具 举报

6

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1149
金钱
1149
注册时间
2015-11-13
在线时间
267 小时
发表于 2016-5-6 14:01:57 | 显示全部楼层
根据现象我的推测是:

因为扇区大小是512个字节,写新的扇区前要擦除一遍新扇区的数据。这个擦除过程需要耗费时间,所以正好错过了你所给的方波的低电平。

有时候擦除花费的时间没有超过你的低电平的时间,所以累积到下一次扇区(就是1024个字节)的时候,这个累积的擦除时间让你的采集略过了方波的低电平。
回复

使用道具 举报

48

主题

180

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2016-3-18
在线时间
88 小时
 楼主| 发表于 2016-5-6 14:51:00 | 显示全部楼层
本帖最后由 mengheli 于 2016-5-6 14:55 编辑
特朗姆斯 发表于 2016-5-6 14:01
根据现象我的推测是:

因为扇区大小是512个字节,写新的扇区前要擦除一遍新扇区的数据。这个擦除过程需 ...

那请问该如何解决那?而且如果是这样的话,那不应该总数对不上才对嘛,因为漏了数据,但实际上总数是对的。而且我是先申请的内存,然后通过DMA向其写入,应该不存在这个问题
回复

使用道具 举报

6

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1149
金钱
1149
注册时间
2015-11-13
在线时间
267 小时
发表于 2016-5-6 15:50:27 | 显示全部楼层
mengheli 发表于 2016-5-6 14:51
那请问该如何解决那?而且如果是这样的话,那不应该总数对不上才对嘛,因为漏了数据,但实际上总数是对的 ...

我不是很理解你是怎么实现写U盘期间不触发AD采集。

我认为外部方波信号是不断地在进入,那么你是怎么做到将数据写入U盘的时候停止外部方波信号进入的?
回复

使用道具 举报

48

主题

180

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2016-3-18
在线时间
88 小时
 楼主| 发表于 2016-5-6 16:17:21 | 显示全部楼层
特朗姆斯 发表于 2016-5-6 15:50
我不是很理解你是怎么实现写U盘期间不触发AD采集。

我认为外部方波信号是不断地在进入,那么你是怎么 ...

精准计数,准确控制触发的个数,这样的话DMA的传输个数就是固定的,DMA传输完成后进中断,脉冲停止,然后写U盘
回复

使用道具 举报

48

主题

180

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2016-3-18
在线时间
88 小时
 楼主| 发表于 2016-5-9 09:56:59 | 显示全部楼层
特朗姆斯 发表于 2016-5-6 16:52
那就是说你定时608个us,采集满608个数据之后你就把这608个数据写进U盘,然后以此往复?

对,脉冲波形查看了,计数非常准
回复

使用道具 举报

48

主题

180

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2016-3-18
在线时间
88 小时
 楼主| 发表于 2016-5-9 10:38:28 | 显示全部楼层
mengheli 发表于 2016-5-9 09:56
对,脉冲波形查看了,计数非常准

已完全确定就是DMA或者ADC的问题,我采用ADC双通道,分别采集3.3和0V,出现了一样的现象和问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 01:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表