
一种可扩展的spi总线与can总线数据转换方法
技术领域
1.本发明涉及通信技术领域,具体涉及一种可扩展的spi总线与can总线数据转换方法。
背景技术:
2.can属于总线式异步串行通信网络,具有可靠性高、错误检测能力强的优点,传输距离可达10千米,是国际上应用最广泛的现场总线之一。spi总线是一种高速同步串行通信总线,通信速率可达50m,spi总线具有传输速度快、结构简单、扩展性强的特点在芯片间通信中得到了广泛应用,但因spi为同步串行总线,可靠性较低、传输距离短。
3.部分嵌入式芯片集成了1到2路can控制器,并且需要外接can收发器。在应用中可能遇到在can资源数量不足,或外接can收发器受限的情况,可通过spi总线扩展can接口。通过spi总线扩展can接口,可以结合spi传输速度快以及can传输距离远的优点,目前应用较多的是由硬件直接实现协议的转换,但该方法存在以下局限性:(1)往往只能实现1路spi与1至2路can接口的协议转换,不具备扩展性或扩展性不足,当需要多路can接口时,需要占用多路spi资源,成本较高,甚至可能无法实现。
4.(2)无法对can接口进行灵活配置,往往只能按固定配置工作,导致数据转换欠缺灵活性,应用条件较严苛,适用性较低。
5.(3)硬件实现时难以进行充分封装,因此主机操作spi接口时,需要遵守硬件时序,并实现复杂的逻辑,编程实现难度较大。
6.(4)难以对spi的接口报文进行必要的封装,无法解决spi的通信可靠性较低的问题。
7.(5)存在高速spi总线与can总线速率不匹配的问题。
8.(6)硬件设计固化后,修改难度较大,维护成本高。
9.(7)需要增加可编程芯片或者专用芯片,成本较高,线路复杂。
技术实现要素:
10.本发明提供一种可扩展的spi总线与can总线数据转换方法,本发明的方法,通过建立数据缓冲区,解决了can总线缓冲区较小以及spi总线与can总线速度不匹配的问题,提高了数据传输可靠性;通过设计数据包封装协议,实现了can数据包的透明传输,增加了协议转换的通用性;根据spi通信特点设计spi双向通信机制,实现通过spi总线的多路can数据包传输。
11.为达到上述目的,本发明的技术方案是:一种可扩展的spi总线与can总线数据转换方法,利用通信主机和一个以上的转换模块作为运行平台,具体步骤如下:s1,扩展通信架构设计:通信主机与一个以上的转换模块间通过spi总线通信,转换模块通过can总线与外部设备连接,利用spi总线一主多从工作方式,将通信主机软件设置为主机模式,转换模块
软件设置为从机模式,通过spi主机连接多个从机方式,通信主机通过多个转换模块搭建通道,实现spi扩展多路can接口功能,对各个通道进行编号。
12.s2,spi报文格式设计:根据spi总线的通信方式,设计统一的spi报文格式;s3,通信机制设计:通信主机通过转换模块实现与多路can设备的通信,在转换模块内增加spi报文缓冲区。
13.s31,数据发送时,通信主机将spi报文发送至各转换模块,各转换模块将spi报文转换为can数据帧,通过can接口对外发送。
14.s32,数据接收时,各转换模块通过can接口接收外部数据,转换为spi报文并存入缓冲区,在通信主机读取数据时,向通信主机发送spi报文。
15.s4,转换模块按统一格式完成spi报文与can数据帧的转换。
16.进一步的,步骤s1具体包括扩展通信架构通信主机和转换模块的功能分配如下:(1)通信主机配置各个通道的转换模块,并监控转换模块状态。
17.(2)通信主机封装需发送至各个通道的spi报文,并处理由各个通道接收到的spi报文。
18.(3)转换模块完成can数据帧的接收和发送,以及can数据帧与spi报文的相互转换。
19.进一步的,通信主机与转换模块间通过spi总线通信具体包括如下内容:(1)控制报文,包括转换模块配置指令、状态查询指令和数据读取指令,配置指令实现转换模块配置,包括通道编号、can工作模式、can波特率、can屏蔽方式及屏蔽码;状态查询指令获取各转换模块的状态信息;数据读取指令读取转换模块的数据帧。
20.(2)状态报文,将转换模块的工作状态信息封装成状态报文,反馈给通信主机。
21.(3)数据报文,将can协议中的帧类型、帧id、数据长度和数据封装成数据报文,实现can数据帧与spi报文相互转换。
22.进一步的,所述spi报文格式具体包括前导序列、报文段和结尾序列,各类报文采用相同格式的前导序列和结尾序列,报文段根据传输报文的不同采用不同的封装格式。
23.(1)前导序列包括起始符、通道号、报文标识和序列校验,用于识别报文开端,标识报文要发向的通道或者产生该报文的通道,并指示报文的类别。
24.(2)报文段为spi报文的实际内容,具体为控制报文、状态报文和数据报文,其中控制报文、状态报文和数据报文具体报文格式不相同。
25.(3)结尾序列为固定序列,标识报文的结尾。
26.进一步的,所述转换模块的配置步骤为:通信主机启动后,根据扩展的can接口数量。
27.(1)查询各通道的转换模块状态,完成各通道转换模块的状态检测。
28.(2)清空各通道转换模块的spi报文缓冲区。
29.(3)设置各通道的can接口工作模式和波特率。
30.(4)设置各通道的接收屏蔽方式和屏蔽码。
31.进一步的,所述前导序列的元素格式为:
(1)起始符为2个字节的固定序列,用于接收方识别报文开端;(2)通道号为通信主机分配的通道编号,根据可扩展通信架构中,通信主机连接多个转换模块的通信方式,前导序列中加入通道号,用以标识发送该spi报文的通道,或者接收到该spi报文的通道。
32.(3)报文标识用于区分报文的类别。
33.(4)序列校验根据前导序列计算,用于对前导序列的正确性进行校验。
34.进一步的,所述报文段格式为:(1)控制报文格式包括指令字、指令参数和报文校验,指令字标识具体指令,指令参数是对应指令所需的参数,根据具体指令设置。
35.(2)状态报文包括标识符、数据区和报文校验,标识符标识状态数据类别,数据区为实际数据。
36.(3)数据报文格式根据can数据帧设计,can总线采用can2.0b标准协议格式,将can协议中的帧类型、帧id、数据长度和数据字段重新进行封装,用于实现can数据帧与spi报文的转换。
37.进一步的,步骤s31数据发送具体包括:(1)按照spi报文格式封装成数据报文;并控制spi总线,将数据报文发送至对应的转换模块。
38.(2)转换模块接收到数据报文后,将spi报文中的帧类型、帧id、数据长度和数据填入can数据帧的对应字段,转换为can数据帧。
39.(3)将转换完成的can数据帧通过can接口发送出去,实现通信主机向特定can接口发送数据。
40.进一步的,步骤s32数据接收具体包括:(1)转换模块建立以数据报文为单元的缓冲区,该缓冲区为环形缓冲区,缓冲区满后禁止写入。
41.(2)转换模块接收到接收到的can数据帧后,将can数据帧封装成数据报文,存入缓冲区。
42.(3)通信主机周期向各转换模块发送数据读取指令,并执行数据读取操作。
43.(4)转换模块接收到通信主机的数据读取指令。
44.(41)若缓冲区存在数据报文,则提取报文,在通信主机读取时,发送至主机。
45.(42)若缓冲区为空,则在通信主机读取时,向主机发送状态报文,通知主机,该通道缓冲区已空。
46.(5)通信主机若读取到数据报文,则解析并处理数据,若读取到缓冲区为空的状态报文,则丢弃数据,并终止本周期的读取操作。
47.本发明所产生的有益效果是:(1)根据spi通信特点设计了可扩展通信架构,利用spi的一主多从工作模式,实现通过1路spi接口扩展多路can接口的功能,大大增加了系统的扩展能力,而且由于spi速度远高于can通信,该扩展方式不会影响can接口的通信速率。
48.(2)根据可扩展通信架构的通信内容,设计了统一的spi报文格式,实现了对can总线灵活配置,对转换模块状态实时监控。
49.(3)根据can数据帧的结构,设计数据报文格式,实现了can数据包的透明传输,增加了协议转换的通用性,通过对转换算法进行必要的软件封装,通信主机软件完全按照标准can数据格式进行接收和发送,编程简单灵活。
50.(4)建立数据缓冲区,解决了can总线缓冲区较小以及spi总线与can总线速度不匹配的问题,降低了对数据处理同步要求,提高了数据传输可靠性。
附图说明
51.图1为本发明的通讯主机与转换模式以及can总线之间的简单示意图。
52.图2为本发明的spi总线与can总线数据转换方法的流程图。
具体实施方式
53.下面结合附图和具体实施方式对本发明做进一步详细说明。
54.如图1所示,一种可扩展的spi总线与can总线数据转换方法,利用通信主机和一个以上的转换模块作为运行平台,通信主机和转换模块采用arm嵌入式处理器,如图2所示,具体步骤如下:s1,扩展通信架构设计:通信主机与一个以上的转换模块间通过spi总线通信,转换模块通过can总线与外部设备连接,利用spi总线一主多从工作方式,将通信主机软件设置为主机模式,转换模块软件设置为从机模式,通过spi主机连接多个从机方式,通信主机通过多个转换模块搭建通道,实现spi扩展多路can接口功能,对各个通道进行编号。
55.扩展通信架构的工作方式为:(1)根据spi总线一主多从工作方式,将通信主机设置为主机模式,转换模块设置为从机模式,各转换模块共用spi的数据线和时钟线,但具有独立的信号线与通信主机连接,通信主机通过操作信号线,选择与其通信的转换模块。
56.(2)通信主机可直接发送数据,但接收数据时,因转换模块不具备主动发送能力,需要通信主机通过查询方式读取转换模块数据。
57.(3)转换模块通过自带的一路或多路can接口与外部can网通信。
58.扩展通信架构通信主机和转换模块的功能分配如下:(1)通信主机配置各个通道的转换模块,通信主机为各个转换模块设置通道编号,并完成各个通道转换模块的can接口配置,设置can接口的工作模式、波特率和屏蔽方式及屏蔽码;通信主机通过控转换模块工作状态,完成装换模块状态自检和实时监控。
59.(2)通信主机封装需发送的spi报文,并控制spi总线,将spi报文发送至对应的转换模块。并读取转换模块缓存的spi报文,对接收到的数据进行解析和处理。
60.(3)转换模块根据通信主机的控制指令,完成can接口的配置,并向通信主机反馈状态报文。
61.(4)转换模块将接收的数据报文转换为can数据帧,通过can接口发送出去。
62.(5)转换模块将接收到的can数据帧转换为spi数据文,并存入缓冲区;待通信主机读取数据数据时,通过spi总线发送至通信主机。
63.通信主机与转换模块间通过spi总线通信具体包括如下内容:
(1)控制报文,包括转换模块配置指令、状态查询指令和数据读取指令,配置指令实现转换模块配置,包括通道编号、can工作模式、can波特率、can屏蔽方式及屏蔽码;状态查询指令获取各转换模块的状态信息;数据读取指令读取转换模块的数据帧。
64.(2)状态报文,将转换模块的工作状态信息封装成状态报文,反馈给通信主机。
65.(3)数据报文,将can协议中的帧类型、帧id、数据长度和数据封装成数据报文,实现can数据帧与spi报文相互转换。
66.s2,spi报文格式设计:根据spi总线的通信方式,设计统一的spi报文格式,实现can接口的灵活配置、转换模块的状态反馈和数据报文与can数据帧的透明转换。
67.spi报文格式具体包括前导序列、报文段和结尾序列,各类报文采用相同格式的前导序列和结尾序列,报文段根据传输报文的不同采用不同的封装格式。
68.(1)前导序列包括起始符、通道号、报文标识和序列校验,用于识别报文开端,标识报文要发向的通道或者产生该报文的通道,并指示报文的类别。
69.起始符:为大于等于2个字节的固定序列,用于接收方在spi总线的串行报文中,识别spi报文的开端。
70.通道号:定义通信主机和相连的1路转换模块为1个通道,对已扩展的通道进的编号,编号值即为通道号,当通信主机需要向转换模块发送spi报文时,在起始序列中加入目的通道号,标识报文将要发向的通道;当转换模块向通信主机反馈spi报文时,在起始序列中加入自身通道号,标识产生该报文的通道。
71.报文标识:报文标识包括报文类别和报文标识,报文类别用于区分控制报文、状态报文和数据报文;报文标识是报文的具体标识,例如控制报文中的波特率设置报文。
72.序列校验:序列字段运算的结果,对前导序列的正确性进行检验。
73.(2)报文段为spi报文的实际内容,具体为控制报文、状态报文和数据报文,其中控制报文、状态报文和数据报文具体报文格式不相同。
74.控制报文格式包括指令字、指令参数和报文校验,指令字标识具体指令,指令参数是对应指令所需的参数,根据具体指令设置。
75.指令字:具体指令的标识,接收方根据指令字识别具体指令。
76.指令参数,对应指令所需的参数,根据具体指令设置。
77.报文校验,报文字段运算的结果,对报文的正确性进行检验。
78.状态报文包括标识符、数据区和报文校验,标识符标识状态数据类别,数据区为实际数据。
79.标识符:工作状态的标识,接收方根据指令字解析工作状态。
80.数据区:转换模块的状态。
81.报文校验,报文字段运算的结果,对报文的正确性进行检验。
82.数据报文格式根据can数据帧设计,can总线采用can2.0b标准协议格式,将can协议中的帧类型、帧id、数据长度和数据字段重新进行封装,用于实现can数据帧与spi报文的转换。
83.帧类型:标识can数据帧的类型为标准帧或者扩展帧。
84.帧id:can数据帧的id,标准帧占2个字节,扩展帧占4个字节。
85.数据长度:can数据帧数据有效长度。
86.数据字段:can数据帧的数据区内容,根据数据长度设置字节数。
87.(3)结尾序列为固定序列,用于接收方在spi总线的串行报文中,识别spi报文的结尾。
88.s3,通信机制设计:通信主机通过转换模块实现与多路can设备的通信,在转换模块内增加spi报文缓冲区。
89.s31,数据发送时,通信主机将spi报文发送至各转换模块,各转换模块将spi报文转换为can数据帧,通过can接口对外发送。具体步骤包括:(1)通讯主机根据can协议,按照spi报文格式将can协议中的帧类型、帧id、数据长度和数据字段封装成数据报文;并控制spi总线,将数据报文发送至对应的转换模块。
90.(2)转换模块接收到数据报文后,将spi报文中的帧类型、帧id、数据长度和数据填入can数据帧的对应字段,转换为can数据帧。
91.(3)将转换完成的can数据帧通过can接口发送出去,实现通信主机向特定can接口发送数据。
92.s32,数据接收时,各转换模块通过can接口接收外部数据,转换为数据报文并存入缓冲区,在通信主机读取数据时,向通信主机发送数据报文。具体步骤包括:(1)转换模块建立以数据报文为单元的缓冲区,该缓冲区为环形缓冲区,缓冲区满后禁止写入;(2)转换模块接收到接收到的can数据帧后,将帧类型、帧id、数据长度和数据字段封装成数据报文,存入缓冲区;(3)通信主机周期向各转换模块发送数据读取指令,并执行数据读取操作;(4)转换模块接收到通信主机的数据读取指令;(41)若缓冲区存在数据报文,则提取报文,在通信主机读取时,发送至主机;(42)若缓冲区为空,则在通信主机读取时,向主机发送状态报文,通知主机,该通道缓冲区已空;(5)通信主机若读取到数据报文,则解析并处理数据,若读取到缓冲区为空的状态报文,则丢弃数据,并终止本周期的读取操作。
93.s4,转换模块按统一格式完成spi报文与can数据帧的转换。
94.其中,所述转换模块的配置步骤为:通信主机启动后,根据扩展的can接口数量,(1)查询各通道的转换模块状态,完成各通道转换模块的状态检测;(2)清空各通道转换模块的spi报文缓冲区;(3)设置各通道的can接口工作模式和波特率;(4)设置各通道的接收屏蔽方式和屏蔽码。
95.本发明所产生的有益效果是:(1)根据spi通信特点设计了可扩展通信架构,利用spi的一主多从工作模式,实现通过1路spi接口扩展多路can接口的功能,大大增加了系统的扩展能力,而且由于spi速度远高于can通信,该扩展方式不会影响can接口的通信速率。
96.(2)根据可扩展通信架构的通信内容,设计了统一的spi报文格式,实现了对can总线灵活配置,对转换模块状态实时监控。
97.(3)根据can数据帧的结构,设计数据报文格式,实现了can数据包的透明传输,增加了协议转换的通用性,通过对转换算法进行必要的软件封装,通信主机软件完全按照标准can数据格式进行接收和发送,编程简单灵活。
98.(4)建立数据缓冲区,解决了can总线缓冲区较小以及spi总线与can总线速度不匹配的问题,降低了对数据处理同步要求,提高了数据传输可靠性。
99.(5)该设计利用现有的成熟芯片,通过开发软件实现,维护和使用成本较低。
技术特征:
1.一种可扩展的spi总线与can总线数据转换方法,其特征在于:利用通信主机和一个以上的转换模块作为运行平台,具体步骤如下:s1,扩展通信架构设计:通信主机与一个以上的转换模块间通过spi总线通信,转换模块通过can总线与外部设备连接,利用spi总线一主多从工作方式,将通信主机软件设置为主机模式,转换模块软件设置为从机模式,通过spi主机连接多个从机方式,通信主机通过多个转换模块搭建通道,实现spi扩展多路can接口功能,对各个通道进行编号;s2,spi报文格式设计:根据spi总线的通信方式,设计统一的spi报文格式;s3,通信机制设计:通信主机通过转换模块实现与多路can设备的通信,在转换模块内增加spi报文缓冲区,s31,数据发送时,通信主机将spi报文发送至各转换模块,各转换模块将spi报文转换为can数据帧,通过can接口对外发送;s32,数据接收时,各转换模块通过can接口接收外部数据,转换为spi报文并存入缓冲区,在通信主机读取数据时,向通信主机发送spi报文;s4,转换模块按统一格式完成spi报文与can数据帧的转换。2.根据权利要求1所述的一种可扩展的spi总线与can总线数据转换方法,其特征在于:步骤s1具体包括扩展通信架构通信主机和转换模块的功能分配如下:(1)通信主机配置各个通道的转换模块,并监控转换模块状态;(2)通信主机封装需发送至各个通道的spi报文,并处理由各个通道接收到的spi报文;(3)转换模块完成can数据帧的接收和发送,以及can数据帧与spi报文的相互转换。3.根据权利要求1所述的一种可扩展的spi总线与can总线数据转换方法,其特征在于:通信主机与转换模块间通过spi总线通信具体包括如下内容:(1)控制报文,包括转换模块配置指令、状态查询指令和数据读取指令,配置指令实现转换模块配置,包括通道编号、can工作模式、can波特率、can屏蔽方式及屏蔽码;状态查询指令获取各转换模块的状态信息;数据读取指令读取转换模块的数据帧;(2)状态报文,将转换模块的工作状态信息封装成状态报文,反馈给通信主机;(3)数据报文,将can协议中的帧类型、帧id、数据长度和数据封装成数据报文,实现can数据帧与spi报文相互转换。4.根据权利要求1或3所述的一种可扩展的spi总线与can总线数据转换方法,其特征在于:所述spi报文格式具体包括前导序列、报文段和结尾序列,各类报文采用相同格式的前导序列和结尾序列,报文段根据传输报文的不同采用不同的封装格式;(1)前导序列包括起始符、通道号、报文标识和序列校验,用于识别报文开端,标识报文要发向的通道或者产生该报文的通道,并指示报文的类别;(2)报文段为spi报文的实际内容,具体为控制报文、状态报文和数据报文,其中控制报文、状态报文和数据报文具体报文格式不相同;(3)结尾序列为固定序列,标识报文的结尾。5.根据权利要求1所述的一种可扩展的spi总线与can总线数据转换方法,其特征在于:
所述转换模块的配置步骤为:通信主机启动后,根据扩展的can接口数量,(1)查询各通道的转换模块状态,完成各通道转换模块的状态检测;(2)清空各通道转换模块的spi报文缓冲区;(3)设置各通道的can接口工作模式和波特率;(4)设置各通道的接收屏蔽方式和屏蔽码。6.根据权利要求4所述的一种可扩展的spi总线与can总线数据转换方法,其特征在于:所述前导序列的元素格式为:(1)起始符为2个字节的固定序列,用于接收方识别报文开端;(2)通道号为通信主机分配的通道编号,根据可扩展通信架构中,通信主机连接多个转换模块的通信方式,前导序列中加入通道号,用以标识发送该spi报文的通道,或者接收到该spi报文的通道;(3)报文标识用于区分报文的类别;(4)序列校验根据前导序列计算,用于对前导序列的正确性进行校验。7.根据权利要求4所述的一种可扩展的spi总线与can总线数据转换方法,其特征在于:所述报文段格式为:(1)控制报文格式包括指令字、指令参数和报文校验,指令字标识具体指令,指令参数是对应指令所需的参数,根据具体指令设置;(2)状态报文包括标识符、数据区和报文校验,标识符标识状态数据类别,数据区为实际数据;(3)数据报文格式根据can数据帧设计,can总线采用can2.0b标准协议格式,将can协议中的帧类型、帧id、数据长度和数据字段重新进行封装,用于实现can数据帧与spi报文的转换。8.根据权利要求1所述的一种可扩展的spi总线与can总线数据转换方法,其特征在于:步骤s31数据发送具体包括:(1)按照spi报文格式封装成数据报文;并控制spi总线,将数据报文发送至对应的转换模块;(2)转换模块接收到数据报文后,将spi报文中的帧类型、帧id、数据长度和数据填入can数据帧的对应字段,转换为can数据帧;(3)将转换完成的can数据帧通过can接口发送出去,实现通信主机向特定can接口发送数据。9.根据权利要求1所述的一种可扩展的spi总线与can总线数据转换方法,其特征在于:步骤s32数据接收具体包括:(1)转换模块建立以数据报文为单元的缓冲区,该缓冲区为环形缓冲区,缓冲区满后禁止写入;(2)转换模块接收到接收到的can数据帧后,将can数据帧封装成数据报文,存入缓冲区;(3)通信主机周期向各转换模块发送数据读取指令,并执行数据读取操作;(4)转换模块接收到通信主机的数据读取指令;
(41)若缓冲区存在数据报文,则提取报文,在通信主机读取时,发送至主机;(42)若缓冲区为空,则在通信主机读取时,向主机发送状态报文,通知主机,该通道缓冲区已空;(5)通信主机若读取到数据报文,则解析并处理数据,若读取到缓冲区为空的状态报文,则丢弃数据,并终止本周期的读取操作。
技术总结
本发明提供一种可扩展的SPI总线与CAN总线数据转换方法,其特征在于:利用通信主机和一个以上的转换模块作为运行平台,具体步骤如下:S1,扩展通信架构设计;S2,SPI报文格式设计;S3,通信机制设计;S4,转换模块按统一格式完成SPI报文与CAN数据帧的转换;本发明的方法,通过建立数据缓冲区,解决了CAN总线缓冲区较小以及SPI总线与CAN总线速度不匹配的问题,提高了数据传输可靠性;通过设计数据包封装协议,实现了CAN数据包的透明传输,增加了协议转换的通用性;根据SPI通信特点设计SPI双向通信机制,实现通过SPI总线的多路CAN数据包传输。实现通过SPI总线的多路CAN数据包传输。实现通过SPI总线的多路CAN数据包传输。
技术研发人员:
郭安罗 郑志鹏 马倩云 马第馍 林云志
受保护的技术使用者:
中船华南船舶机械有限公司
技术研发日:
2022.11.04
技术公布日:
2023/3/30
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/72163.html