[SPI通讯] 没有被SPI调试搞痛过吗

前言

没有被SPI调试搞痛过,敢说自己调试过SPI通讯吗?分享一次调试SPI的经历,其中遇到的困难和问题,以及应对问题的方法,可能对读者有一定的参考意义。当然读完后,没有发现有价值的东西,还请求继续读下一篇........


硬件环境

一块MCU走SPI连接到iMx6solox上,imx6solox上跑的是嵌入式linux系统,MCU端SPI作主,imx6solox端SPI做从。

软件调试

1、开始阶段的软件验证硬件,比较顺利。
使用一块USB转SPI小板作为SPI主(小板USB插入PC,在PC上有上位机软件控制),imx6solox的SPI为从,mode为0,速率1000kBPS,每字8位。
在imx6solox的linux端,使用spidev_test(/tool/spi/spidev_test.c)作为软件调试工具,比较顺利调试通过,当然仅仅是小数据量的单次收发。

2、在mcu通过connector插入后,遇到困难。
真正的苦难开始于大数据量的传输调试,数据丢包,并且是随机丢包。

3、丢包的追踪和分析

3.1. SPI驱动的初始默认buf大小为512字节,相对我们的需求来说太小,修改到4K字节;
3.2. 在SPI驱动里发现SOC平台发开者遗留的一个修改注释:在每次transmit后,都会将底层SPI使用到的FIFO清空(这是为了处理另外一个SPI发送的issue,而做的临时解决方案),由于imx6端仅仅是从SPI上读数据,不做发包操作,所以暂时关闭这个workaround修改;
3.3. 根据SPI的buf的大小计算一次获取的数据量大小,保证(N * SPI主每次定长发包的SIZE)<= IMX6下SPI驱动buf大小;
3.4. 担心硬件有问题造成数据丢包,将SPI的mode修改到1,在时钟下降沿来获取数据。
期间和硬件同事使用示波器查看过SPI的波形,mode0时,看到的波形还不错,没有发现可疑问题,修改为mode1,只是保险搞法;

经过以上修改,长时间测试,未发现随机丢包问题。由于项目周期压力过大,被丢包搞疼后,没有时间回头去找到ROOT原因。  

暂告一个段落

SPI数据传输,在不久的将来还降扩展到更大的传输速率上,那么当前的SPI设置和workaround的方案还将继续接受考验。
以此文档记录下遇到的问题,作为以后调试的依据。

当然,回忆每次调试SPI通讯的时候,困难来自于哪里?从自己的经历看,来自于以下几个方面。
1. 由于项目周期压力很大,多模块并行开发。
SPI的双工特性,作为SPI发送数据的一方,他们自己的代码也在开发中。而开发者都对自己的代码较为自信,并希望SPI接收方来帮助自己验证接收数据的完整性和有效果性;如果SPI本身就不稳定的话,在调试中带入的不确定性太大。

2. 以SPI主从模式看,想要搭建这样一个闭环的测试环境较麻烦
可以通过飞线的方式,搭建一个自发自收的SPI通路。但是在模拟数据发送的操作时,和真实的项目应用场景(MCU发送数据)还是有较大差异。自发自收不丢包,但是MCU->iMX6时,就随机丢包。

3. 硬件的不确定性
硬件的同事第一次基于imx6做这样的板子。早期在软件开发还没有完成的情况下,如何尽早的验证硬件的稳定性是一个课题。简单的数据传输正常可用,和在247的持续高速传输情况下的稳定性比,差距还是很大。编写类似的测试用例,还是很重要。

以上仅为个人项目总结

 

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值