智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2064|回复: 7
打印 上一主题 下一主题

[软件类] SD卡记录摄像头的一些坑和最终办法

[复制链接]

1

主题

3

帖子

1

精华

注册会员

Rank: 2

积分
142
威望
82
贡献
54
兑换币
70
注册时间
2017-12-6
在线时间
3 小时
跳转到指定楼层
1#
发表于 2018-3-3 21:55:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这篇文章分享一下SD卡记录摄像头数据的一些代码和经验。
这篇文章实验的环境是K60。最终的方案是SPI + DMA写SD卡,最后会有代码。
    最早的时候,学长记录摄像头数据是用山外的SDHC库来写扇区,因为没有文件系统,电脑上没办法直接读取数据,然后用单片机再读出来发串口到调试助手上面去。感觉太过麻烦了,于是自己写了一个简易的FAT32文件系统,初始化的时候创建一个32MB的文件,拿到扇区地址,之后连续写摄像头数据,既不会因为文件系统影响写入时间,也不会突然断电而没有同步到文件。

    然而真正的问题并不在这里,写文件的时候最经常遇到的问题是,写入速度太慢,SDHC一次写入两个扇区的时间飘忽不定,一度达到8ms以上,有的时候会卡死在寄存器等待的地方,严重影响了程序的时序和逻辑。真正的困扰在于SDHC工作在25MHz都已经这么慢,何况SPI呢?
    真正的启发是在玩Arduino的时候,写了一个扇区 ,发现逻辑分析仪测得的时间只有2ms。Arduino使用的是8MHz SPI通信,竟然可以稳定在2ms的时间,发现问题并不在通信速度上。于是准备开始使用的SPI写SD卡,保持一个稳定的速度最为重要。但是在网上找了一圈也没有找到,SPI读写SD卡比较完善的库,只好把Arduino的那一套搬过来,把之前C++用C重写了一遍,移植到了K60上,直接把片选脚复用成GPIO,频率调到8MHz。连续写两个扇区大概只有3.5ms左右。SPI 25Mhz下和8Mhz下差距不过0.4ms,主要是SPI传输延迟(DT,PDT寄存器为0)已经达到极限,一味提高频率几乎没有任何收益。

    于是开始配置DMA,DMA跟SPI有一点很坑,SPI有长度为4的FIFO,DMA发送512字节,发到508字节时,DMA就触发中断了(其余的4 bytes 在FIFO里被后面清掉了),需要清掉FIFO,判断SD卡状态接着发下一个扇区,发送的时序完全一样,但是就是DMA写会失败,发现传输的字节数不一样,原来是DMA没有发完放到了FIFO里就触发了中断,只好重新用SPI计数寄存器判断才解决。
    本以为DMA写扇区已经大功告成了。因为SD卡发送完成时需要发送STOP TOKEN并等待2+ms左右,实际8MHz SPI传输完两个扇区的数据只用了不到1ms,我想先发送STOP TOKEN,然后进入程序逻辑,等处理完数据再进行等待。然而在DELAY 2ms以后,这段等待时间竟然还在!!!意味着这2ms的时间没办法被跳过,期间你必须不断发送0xff给SD卡时钟!!!

    最后想到一个办法,通过DMA发送这些数据,于是出于习惯,const uint8_t h_ff[] = {0xff};,把地址给DMA发送256个中断一次判断SD卡是否已经准备好了。这样就完全不消耗CPU时间了,然而却发现DMA发了一个就不发了,最后问题是去掉const就可以了,貌似DMA没办法发送flash上codata段的数据。。。
    至此几乎所有的坑都踩了一遍,成功了,期间很多折磨人的bug也不值得一一细说了。
这是山外摄像头开启双缓冲下的表现,sd_fps是写入帧数

代码会自动在分区里按序号保存文件

python读取摄像头的数据,示例会包含在代码里,运行环境是Anaconda python3


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

1

主题

3

帖子

1

精华

注册会员

Rank: 2

积分
142
威望
82
贡献
54
兑换币
70
注册时间
2017-12-6
在线时间
3 小时
2#
 楼主| 发表于 2018-3-3 21:58:07 | 只看该作者
我使用的是8G C10的SD卡,跟卡也会有些许关系,自己斟酌
回复 支持 反对

使用道具 举报

31

主题

155

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
9286
威望
4170
贡献
2660
兑换币
2694
注册时间
2014-2-26
在线时间
1228 小时
3#
发表于 2018-3-5 21:13:23 | 只看该作者
DSLogic好用吗?
回复 支持 反对

使用道具 举报

56

主题

1684

帖子

2

精华

版主

有所思,有所为。

Rank: 9Rank: 9Rank: 9

积分
9497

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章资源大师奖章论坛骨干奖章

威望
6762
贡献
83
兑换币
3601
注册时间
2014-10-31
在线时间
1326 小时
4#
发表于 2018-3-6 16:10:27 | 只看该作者
前排,前排。
回复 支持 反对

使用道具 举报

1

主题

3

帖子

1

精华

注册会员

Rank: 2

积分
142
威望
82
贡献
54
兑换币
70
注册时间
2017-12-6
在线时间
3 小时
5#
 楼主| 发表于 2018-3-8 08:05:34 | 只看该作者
本帖最后由 ReDe 于 2018-3-8 08:08 编辑

buffer模式400MHz采样,还是很好用的
回复 支持 反对

使用道具 举报

1

主题

33

帖子

0

精华

高级会员

Rank: 4

积分
619
QQ
威望
303
贡献
188
兑换币
204
注册时间
2017-7-31
在线时间
64 小时
毕业学校
家里蹲大学
6#
发表于 2018-3-8 14:56:13 | 只看该作者
楼主强
回复 支持 反对

使用道具 举报

4

主题

67

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1960
威望
970
贡献
608
兑换币
631
注册时间
2016-8-5
在线时间
191 小时
毕业学校
SDUST
7#
发表于 2018-3-22 23:09:57 | 只看该作者
66666666666666666666666
回复 支持 反对

使用道具 举报

0

主题

19

帖子

0

精华

高级会员

Rank: 4

积分
712
QQ
威望
350
贡献
220
兑换币
236
注册时间
2018-1-23
在线时间
71 小时
8#
发表于 2018-3-23 03:23:10 | 只看该作者

朋哥6666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-4-25 02:28 , Processed in 0.052695 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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