SPI转CAN芯片丢包严重
SPI转串口芯片没有预留缓存和更高的优先级导致数据丢包
一、摘要
很多芯片没有CAN接口,或者CAN接口不够用,而SPI接口是经常多余的,此时SPI转CAN就会派上用场,但是要注意避坑。
二、问题描述
之前我们做过一个产品,这个产品用在工业现场控制,对接的是老外的设备,老外比较喜欢用CAN接口,而且CAN不能挂太多的设备,产品一共需要4CAN,而我们选用的主芯片只有3路CAN,因此另一路只能靠扩展得到,因为有多余的SPI接口,经过权衡,我们选用了SPI转CAN芯片,具体型号隐藏一下,避免广告嫌疑。产品测试顺利,正常发布,但是客户使用半年后反馈,有其中一路CAN存在丢包的情况,虽然丢包率不高,只有5%的设备会丢包,且丢包率0.1%不到,但是客户用这路CAN用作实时控制,有线通信不允许任何的丢包。急需我们解决。
图1 :SPI转CAN的原理图
三、原因分析
客户反馈的其中一路丢包,经过简单的分析,确认是我们使用的SPI转CAN的方案,由于客户现场较远,刚好公司有50台的库存产品,于是我们在公司内部搭建50台的测试样品,情况基本与客户的说法吻合,有一两台设备偶尔会丢包,是由于我们研发测试时候的样本量不够大,没有发现这个问题。
由于是公司内部可以复现问题,基本与干扰无关,于是软硬件开始投入分析,硬件工程师测试了电源时钟复位、信号完整性、时序、电压纹波、带载能力等,全部都没有发现问题,于是重点投入在软件,软件工程师开放了日志功能,定位出问题的软件模块,终于功夫不负有心人,最终定位在CAN芯片的中断处理程序上。与软件工程师沟通,软件的处理逻辑是这样的:
1, 向can芯片发送reset命令,复位该芯片。2, 配置CANCTRL寄存器,REQOP[2:0]=100b,即配置模式。3, 配置CNF1、CNF2和CNF3,设定波特率。4, 配置发送缓冲器,设置ID、优先级、数据长度等参数。5, 配置接收缓冲器,设置ID、接收模式等,可以选择配置接收滤波器。6, 配置CANCTRL,REQOP[2:0]=010b,即回环模式。7,配置CAN中断在系统的优先级,CAN排在第5位。
通过软件工程师的日志记录,出现丢包时,CAN芯片发出了中断,但是由于can的中断不是很高,被前面的异常中断抢占,而此时有恰好发生在CAN接收缓存满的情况,因为数据溢出,导致收到的数据被丢弃,最终体现为丢包。
四、解决方案
已经定位到原因,主要是三个碰巧的原因:
1、CAN芯片接收缓存满了,数据溢出;2、CAN中断发生时,被其他更高级的中断抢占;3、用户配置CAN速率时较高,导致缓存很快就满 。
经过沟通讨论,我们决策采取以下的措施:
1、CAN中断提高到第二级优先级,只比系统终端低一级;及时取走缓存器中的数据;2、由于客户用不到这么高速,建议客户配置成1Mbps的速率。经过我们的整改,在公司内部验证的50台设备,以及客户现场的一千多台设备的升级观察以后,上述的丢包问题再也没有重现。
五、总结
很多工程师以为SPI转CAN只是硬件工程师的活,就像UART转RS485一样,仅仅是接口转换。实际上,由于SPI转CAN需要用到缓存,需要用到系统的中断,并且速率较高,如果没有一定软件实力的公司,建议还是不要使用这种转换得到的CAN接口,寻找足够的CAN接口芯片才是王道。
512Kbit SPI SRAM芯片SCLPSRAC1
SPI SRAM 就是串口SRAM,串行SRAM提供一种几乎能在任何应用上添加外置RAM的方法,这种方法成本相对低廉、操作简单。8引脚串行器件的功耗更低,所用I/O连接数量更少。利用这些器件,设计人员可以使用更小的微控制器,而无需仅仅为了获得更大的板载RAM而改用更大的器件。 英尚微提供一款512Kbit SPI SRAM芯片SCLPSRAC1存储器大小为512Kbit。位宽64Kx8位。提供高速性能和低功耗。使用单一芯片选择(CSN)输入进行操作,并通过简单的串行SPl兼容接口进行访问。一条数据输入和数据输出线与一个时钟一起用于访问设备内的数据。包括一个HOLDN引脚,该引脚允许在不取消选择设备的情况下暂停与设备的通信。暂停时,除CSN引脚外的输入转换将被忽略。可在-40℃至+85℃的温度范围内工作,并可采用节省空间的8引脚TSSOP封装。更多产品详情及样品测试联系英尚微电子。 伟凌创芯代理英尚微提供的SPI兼容型串行SRAM器件有256Kb、512Kb和64Mb容量供用户选择。这些器件以低功耗实现高速性能,非常适合需要更大RAM的嵌入式应用。
相关问答
单片机的sci模块和spi模块分别指的什么啊?
单片机的SCI模块和SPI模块分别指串行通信接口和同步串行外设接口。SCI模块是一种串行通信接口模块,用于实现单片机和外部设备进行串行通信。常用于单片机和PC...
两款芯片硬件都支持SPI通信,如何实现两芯片之间的数据通信...
两款芯片既然都支持SPI通信,那这两款芯片之间就通过SPI即可实现数据通信。SPI是一种串行外设接口,可以实现高速、全双工通信,主要用在近距离通信中,如芯片之间...
spi通信是串行还是并行?
是串行。SPI是串口外设接口的缩写,是一种高速的、全双工、同步的通信协议,是微处理器与外围IC之间常用的一种通讯方式。SPI是主从式的通信协议,可以一主机一...
单片机串口通信方式0和单片机用用工作方式0进行SPI通信是...
就是串口通信方式0不是SPI通信这两种通信方式有些相同之处,还有些不同相同:他们都是同步串行通讯。不同的地方:方式0:为同步移位寄存器的输入输出方...
SPI、I2C、USART等协议有什么共同点和区别?
这个,还是先说说三种协议的特点吧。1、SPI。串行通信协议,全双工的同步通信总线协议,要分主从,要占四根线(四个管脚),算是速度比较高的一种了(这三种...它通讯...
TTL串行控制跟SPI串行控制有什么区别?
TTL串口是异步的,SPI是同步,这个是区别的根本了。异步通信采用相同的帧格式,数据以相同帧格式进行传输。每一帧由起始位(0,设备准备接受信号),数据位(可...数据...
DSP2812中SCI和SPI有什么区别_作业帮
[最佳回答]SPI(SerialPeripheralInterface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息.串行通...
单片机中VCC,GND,RST,SCK,MISO,MOSI这些脚怎么接啊?各代表什...
SCK是SPI的时钟MISO主机人从机出;MOSI主机出从机入;名字相同的对应相接电源,接地,复位,剩下四个是SPI同步串口通信用到的四个东东啊单片机这东西一通百...
DSP2812中SCI和SPI有什么区别?
SPI(SerialPeripheralInterface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。串行通信接口SCI(...
51单片机能和stm32的CAN进行通信?
51单片机内部没有集成CAN控制器,需要外接CAN控制器芯片和接口芯片才可以和STM32单片机进行CAN通讯。具体设计时应当注意,外置CAN控制器芯片和stm32单片机内部...