CN108132896A - 数据传输方法和装置 - Google Patents
数据传输方法和装置 Download PDFInfo
- Publication number
- CN108132896A CN108132896A CN201810043515.8A CN201810043515A CN108132896A CN 108132896 A CN108132896 A CN 108132896A CN 201810043515 A CN201810043515 A CN 201810043515A CN 108132896 A CN108132896 A CN 108132896A
- Authority
- CN
- China
- Prior art keywords
- data
- spi
- sent
- mcu
- mcu system
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
- G06F13/26—Handling requests for interconnection or transfer for access to input/output bus using interrupt with priority control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0002—Serial port, e.g. RS232C
Abstract
本发明实施例提供一种数据传输方法和装置,所述数据传输方法包括接收所述MCU系统发送的SPI中断信号,基于该SPI中断信号提供第一时钟信号给所述MCU系统;基于所述第一时钟信号读取所述MCU系统中待发送数据包的帧头,并根据所述帧头判断该待发送数据包是否为有效数据;若所述待发送数据为有效数据,则提供第二时钟信号给所述MCU系统,基于该第二时钟信号读取所述待发送数据包中的消息体,并在读取完成时发送数据确认信号给所述MCU系统。本发明实施例能够有效确保数据传输过程的实时性和可靠性。
Description
技术领域
本发明涉及车载通信技术领域,具体而言,涉及一种数据传输方法和装置。
背景技术
在智能汽车发展的大潮下,将Android系统应用到汽车领域以实现车载终端智能化已是大势所趋,但由于车载总线CAN、LIN都属于实时总线,而Android系统属于非实时系统,导致现有的Android系统与汽车总线的传输均是对变化状态的更新传输,而无法实现可靠有效实时性数据传输,进而导致无法对汽车整个运行场景作大数据分析。
发明内容
有鉴于此,本发明实施例的目的在于提供一种数据传输方法和装置,以改善上述问题。
本发明较佳实施例提供了一种数据传输方法,应用于Android系统,所述Android系统通过外设的SPI(Serial Peripheral Interface,串行外设接口)总线与车载MCU(Microcontroller Unit,微控制单元)系统连接,所述方法包括:
接收所述MCU系统发送的SPI中断信号;
根据所述SPI中断信号提供第一时钟信号给所述MCU系统,并基于所述第一时钟信号读取所述MCU系统中待发送数据包的帧头,根据所述帧头判断该待发送数据包是否为有效数据;
若所述待发送数据为有效数据,则提供第二时钟信号给所述MCU系统,基于该第二时钟信号读取所述待发送数据包中的消息体,并在读取完成时发送数据确认信号给所述MCU系统。
进一步地,在执行接收所述MCU系统发送的SPI中断信号的步骤之前,所述方法还包括:
将SPI处理线程对应的线程调用策略的优先级配置为最高优先级;
在执行提供第一时钟信号给所述MCU系统的步骤之前,所述方法还包括:
基于所述SPI中断信号,响应线程调用指令并根据该线程调用指令对应的线程调用策略调用SPI处理线程,并通过所述SPI处理线程执行提供第一时钟信号给所述MCU系统,直到发送数据确认信号给所述MCU系统的步骤。
进一步地,所述根据该线程调用指令调用SPI处理线程的步骤之前,所述方法还包括:
判断所述SPI处理线程是否正在处理其他SPI事件,若是,则将所述其他SPI事件添加至SPI事件处理队列。
进一步地,所述Android系统包括内核层和应用层,读取所述待发送数据包中的消息体的步骤包括:
所述内核层申请物理页内存并读取所述待发送数据包中的消息体以保存在该物理页内存中,并通过vmap方式将所述物理页内存映射至虚拟内存中;
所述应用层通过mmap接口映射位于所述虚拟内存中的消息体以实现数据读取。
进一步地,所述Android系统还包括驱动层,所述驱动层设置有POLL接口以及用于驱动SPI总线的SPI设备,读取所述待发送数据包中的消息体的步骤还包括:
所述驱动层检测所述SPI设备中是否有数据到达,并在有数据到达时驱动所述POLL接口发送事件侦听指令给所述应用层;
所述应用层根据所述事件侦听指令检测所述述虚拟内存中是否存在待读取数据,若存在,则执行所述应用层通过mmap接口映射位于所述虚拟内存中的消息体以实现数据读取的步骤。
进一步地,所述虚拟内存中设置有用于实现锁机制的第一共享向量和第二共享向量,所述应用层通过mmap接口映射位于所述虚拟内存中的消息体以实现数据读取的过程包括:
所述应用层访问所述第一共享向量和第二共享向量,判断所述第一共享向量和第二共享向量之间进行异或的结果是否为预设值,若是,则所述应用层持有锁,并在该应用层持有锁的状态下通过mmap接口映射位于所述虚拟内存中的消息体以实现数据读取。
进一步地,在所述Android系统接收所述MCU系统传输的数据时,当所述Android系统存在需要发送给所述MCU系统的数据,所述方法还包括:
判断所述Android系统需要发送给所述MCU系统的数据的数据长度是否小于所述MCU系统发送给所述Android系统的数据长度,若小于,则所述Android系统将所述数据发送给所述MCU系统。
本发明较佳实施例还提供一种数据传输装置,应用于Android系统,所述Android系统通过外设的SPI总线与MCU系统连接,所述装置包括:
信号接收模块,用于接收所述MCU系统发送的SPI中断信号;
帧头读取模块,用于根据所述SPI中断信号提供第一时钟信号给所述MCU系统,并基于所述第一时钟信号读取所述MCU系统中待发送数据包的帧头,根据所述帧头判断所述待发送数据包是否为有效数据;
消息体读取模块,用于若所述待发送数据为有效数据,则提供第二时钟信号给所述MCU系统,基于所述第二时钟信号读取所述待发送数据包中的消息体,并在读取完成时发送数据确认信号给所述MCU系统。
进一步地,所述装置还包括:
优先级设置模块,用于将SPI处理线程对应的线程调用策略的优先级配置为最高优先级;
线程调用模块,用于基于所述SPI中断信号,响应线程调用指令并根据该线程对应的线程调用策略调用指令调用SPI处理线程,并通过SPI处理线程实现所述帧头读取模块或/和所述消息体读取模块的功能。
进一步地,所述线程调用模块还用于判断所述SPI处理线程是否正在处理其他SPI事件,若是,则将所述其他SPI事件添加至SPI事件处理队列,并执行调用所述SPI处理线程的步骤。
进一步地,所述Android系统包括内核层和应用层,所述读消息体读取模块包括:
映射单元,用于所述内核层申请物理页内存并读取所述待发送数据包中的消息体以保存在该物理页内存中,并通过vmap方式将所述物理页内存映射至虚拟内存中;
读取单元,用于所述应用层通过mmap接口映射位于所述虚拟内存中的消息体以实现数据读取。
进一步地,所述Android系统还包括驱动层,所述驱动层设置有POLL接口以及用于驱动SPI总线的SPI设备,所述读消息体读取模块还包括:
数据检测单元,用于所述驱动层检测所述SPI设备中是否有数据到达,并在有数据到达时驱动所述POLL接口发送事件侦听指令给所述应用层;
数据判断单元,用于所述应用层根据所述事件侦听指令检测所述述虚拟内存中是否存在待读取数据,若存在,则执行所述应用层通过mmap接口映射位于所述虚拟内存中的消息体以实现数据读取的步骤。
进一步地,所述虚拟内存中设置有用于实现锁机制的第一共享向量和第二共享向量,所述读取单元还用于所述应用层访问所述第一共享向量和第二共享向量,判断所述第一共享向量和第二共享向量之间进行异或的结果是否为预设值,若是,则所述应用层持有锁,并在该应用层持有锁的状态下通过mmap接口映射位于所述虚拟内存中的消息体以实现数据读取。
进一步地,所述装置还包括:
数据发送判断模块,用于判断所述Android系统需要发送给所述MCU系统的数据的数据长度是否小于所述MCU系统发送给所述Android系统的数据长度,若小于,则所述Android系统将所述数据发送给所述MCU系统。
与现有技术相比,本发明实施例提供一种数据传输方法和装置,其中,通过在非实时性的Android操作系统与实时性的MCU系统之间提供一种可靠的SPI总线传输方式实现Android系统与MCU系统之间的实时性数据传输。同时,本发明基于实时性数据的传输能够实现对汽车整个运行场景的大数据分析。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例提供的数据交互场景示意图。
图2为本发明实施例提供的数据传输方法的流程示意图。
图3为图2中所述的步骤S130的子流程示意图。
图4为本发明实施例提供的双工模式下的另一数据传输流程示意图。
图5为本发明实施例提供的双工模式下的数据传输流程示意图。
图6为本发明实施例提供的单工模式下的数据传输流程示意图。
图7为本发明实施例提供的数据传输装置的方框结构示意图。
图标:10-Android系统;11-CLK信号线;12-INT信号线;13-Mosi信号线;14-Miso信号线;100-数据传输装置;110-信号接收模块;120-帧头读取模块;130-消息体读取模块;140-优先级设置模块;150-线程调用模块;160-数据发送判断模块;20-MCU系统;30-汽车分布式电子系统。
具体实施方式
本发明实施例提供一种基于SPI总线的数据传输方法和装置,以实现Android系统10和MCU系统20之间进行数据传输时的实时性和可靠性,同时该方法还能够在总线速率和负载率比较高的情况下,维持较低的数据丢包率。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
如图1所示,为本发明较佳实施例提供的数据交互场景示意图,该交互场景包括Android系统10、MCU系统20、车载总线和汽车分布式电子系统30。
Android系统10设置有SPI设备和SPI总线,SPI设备设置于该Android系统10的驱动层,SPI总线外设于Android系统10并与MCU系统20连接。其中,SPI设备用于驱动SPI总线以实现Android系统10与MCU系统20之间的数据传输。应注意,本实施例中,SPI设备用于驱动SPI总线的同时,还为Android系统10中的应用层提供字符驱动接口。另外,所述Android系统10还包括除驱动层外的核心层和应用层。
可选地,SPI总线包括CLK信号线11、INT信号线12、Mosi信号线13和Miso信号线14。其中,CLK信号线11用于Android系统10输出时钟信号给MCU系统20,INT信号线12用于由MCU系统20输出中断信号给Android系统10,Mosi信号线13用于Android系统10输出数据给MCU系统20,Miso信号线14用于MCU系统20输出数据给Android系统10。
MCU系统20通过车载总线与汽车分布式电子系统30连接以获取该汽车分布式电子系统30的运行数据等,并通过SPI总线转发给Android系统10进行分析、处理。其中,车载总线为实时性总线,如LIN总线、CAN总线等,汽车分布式电子系统30可以包括但不限于车身ECU(Electronic Control Unit,电子控制单元)、盘控或座椅控制系统等,本实施例在此不做限制。
进一步地,基于对上述数据交互场景的描述,如图2所示,本发明实施例提供一种应用在数据交互场景中的Android系统10的数据传输方法,下面结合图2中所示的具体流程和步骤对数据传输方法进行详细描述。
步骤S110,接收MCU系统发送的SPI中断信号。
步骤S120,根据SPI中断信号提供第一时钟信号给MCU系统,并基于第一时钟信号读取MCU系统中待发送数据包的帧头,根据帧头判断该待发送数据包是否为有效数据。
步骤S130,若待发送数据为有效数据,则提供第二时钟信号给MCU系统,基于该第二时钟信号读取待发送数据包中的消息体,并在读取完成时发送数据确认信号给MCU系统。
上述步骤S110至步骤S130中给出的数据传输方法是基于非实时性的Android操作系统10与实时性的MCU系统20之间提供一种可靠的SPI总线传输方式,解决了Android系统10接入车载实时总线的瓶颈问题,能够有效实现Android系统10与车载MCU系统20之间数据传输的实时性和可靠性。
具体地,在步骤S110中,SPI中断信号由INT信号线12传输至Android系统10的SPI设备,以使得Android系统10根据该SPI中断信号调用SPI线程。如Android系统10可基于SPI中断信号响应线程调用指令并根据该线程调用指令对应的线程调用策略调用SPI处理线程以执行步骤S120和步骤S130。
可选地,根据SPI中断信号触发线程调用指令的触发方式有多种,例如,可通过人工触发调度器的方式实现,也可根据SPI中断信号自动触发的方式实现等,本实施例在此不做限制。其中,在SPI处理线程发起一次SPI总线过程中,SPI总线过程可由SPI控制器及DMA(Direct Memory Access)控制器发起。例如,在一次SPI总线过程中SPI处理线程被挂起,当读取到SPI总线数据或SPI总线数据写到SPI总线时,由读SPI数据的DMA中断及SPI写数据中断通过人工触发调度器使得SPI处理线程再次投入运行。
进一步地,在一个实施例中,可在执行步骤S110之前,先将SPI处理线程对应的线程调用策略的优先级配置为最高优先级,以用于在所述Android系统10接收到SPI中断事件时,通过所述线程调用策略调用所述SPI线程执行对应的动作,如步骤S120和步骤S130。通过该设置,能够避免现有技术中由于SPI处理线程的调度周期(如10ms等)较长而无法满足数据传输过程中的实时性需求的问题。具体如现有的SPI中断事件运行于Linux中断上下文以满足实时性处理需求,但是SPI处理线程运行于进程上下文,使得现有的进程调度器调度所述SPI处理线程的调度周期一般为10ms,从而导致SPI处理线程的调度周期较长。
进一步地,为提高SPI处理线程的利用效率,同时保证Android系统10对SPI中断事件处理的及时性,在Android系统10根据接收到的SPI中断信号调用SPI处理线程的步骤之前,还需要判断SPI处理线程是否正在处理其他SPI事件,若是,则将该其他SPI事件添加至SPI事件处理队列,以使该SPI处理线程空闲以执行步骤S120和步骤S130。同时,当SPI处理线程处理完步骤S120和步骤S130中的SPI事件之后,再去处理SPI事件处理队列中的SPI事件并在处理完成后退出。
进一步地,在步骤S120和步骤S130中,第一时钟信号为Android系统10读取MCU系统20中待发送数据包的帧头的时间周期,且第一时钟信号可以为但不限于9个CLK字节。第二时钟信号的作用与第一时钟信号的作用类似,可用作Android系统10读取MCU系统20中待发送数据包的消息体的时间周期,该第二时钟信号可以根据待发送数据包中的帧头确定,本实施例在此不做限制。另外,第一时钟信号和第二时钟信号均由Android系统10中的内核层提供给CLK信号线11进行传输。
进一步地,如表1所示为待发送数据包的数据格式,待发送数据包包括帧头和消息体,具体如下。
表1
其中,由于MCU系统20发送数据的过程是依赖其接收到的数据,如Android系统10中的核心层发送的时钟信号等,且MCU系统20在第三个时钟周期将有效数据存放至发送寄存器。因此,待发数据包中的前导符为非有效数据0x00,且每个前导符占1个字节。另外,0xFF、0xA5、0x5A为待发送数据包中的固定字段,且分别占一个字节。ID表示帧ID,且占一个字节。Length表示该帧的消息体的长度,占两个字节,其中包含消息体一个字节的校验位,Chuksum表示该帧头ID length三个字节的校验。
此外,数据确认信号可记为ACK(Acknowledgemen)消息,Android系统10或MCU系统20可根据接收到的ACK消息确认消息传输是否成功以及是否需要进行数据重发等。在一个实施例中,ACK消息的数据格式如表2所示。
表2
从表2中可以看出,ACK消息的数据格式仅包含表1中所示的待发送数据包的帧头部分,其中,length部分为0xFFFF。
进一步地,在一个实施例中,由于Android系统10包括内核层和应用层,因此可通过对现有的Linux提供的read文件操作接口进行优化,以使得该应用层与内核层通过共享内存的方式进行数据读取,能够大幅提升步骤S130中所述的数据读取的实时性,具体地,如图3所示,基于优化后的read文件操作接口进行数据读取的过程包括以下步骤。
步骤S131,内核层申请物理页内存并读取待发送数据包中的消息体以保存在该物理页内存中,并通过vmap方式将物理页内存映射至虚拟内存中。
步骤S132,应用层通过mmap接口映射位于虚拟内存中的消息体以实现数据读取。
基于上述步骤S131和步骤S132,Android系统10中的驱动层还可设置有POLL接口,以进一步提高内核层与应用层通过共享内存的方式进行数据读取时的实时性。具体地,驱动层检测SPI设备中是否有数据到达,并在有数据到达时驱动POLL接口发送事件侦听指令给应用层,应用层根据事件侦听指令检测虚拟内存中是否存在待读数据,若存在,则通过mmap接口映射位于虚拟内存中的数据,如消息体等,以实现数据读取。应理解,POLL接口包括POLLIN或POLLOUT两种状态。
进一步地,在一个实施例中还可通过在内核层与应用层之间提供一种轻量级锁机制,该轻量级锁机制的具体实现过程为:在虚拟内存中设置第一共享向量和第二共享向量,且应用层和内核层均能访问到第一共享向量和第二共享向量,以使得应用层和内核层可根据第一共享向量和第二共享向量的异或结果确定是否持有锁。
在此以应用层为例,假设应用层访问第一共享向量和第二共享向量,并判断访问到的第一共享向量和第二共享向量之间进行异或的结果是否为预设值,若是,则应用层持有锁,并在该应用层持有锁的状态下可通过mmap接口映射位于虚拟内存中的消息体以实现数据读取。下面进一步结合表3对轻量级锁机制的具体原理进行介绍。假设第一共享向量为a,第二共享向量为b,应用层和内核层均可以访问到第一共享向量a和第二共享向量b,内核层及应用层获取锁时,对第一共享向量为a和第二共享向量为b做异或操作,当内核层的异或结果为0时,则内核层持有锁,当应用层的异或结果为1时,则应用层持有锁。释放琐时,内核层及应用层改变a或b的值即可。
在此应注意,本实施例中采用共享变量的方式实现内存栅栏式的轻量级锁机制,可保证应用层与内核层访问数据的一致性。
表3
进一步地,为了有效确保数据传输的可靠性,在一个发明实施例中数据传输方法还可包括上行重传机制和下行重传机制,具体如下:
上行重传机制:当MCU系统20发送数据到Android系统10中的内核层,且该核心层确认数据正常接收到时立即发送ACK消息给MCU系统20,MCU系统20接收到ACK消息时则表明数据传输结束。但若MCU系统20在预设时长内未收到ACK消息,则重发数据到Android系统10,并重复上述过程直至重发次数超过预设次数,如20次等。此外,若Android系统10的核心层收到的数据有误或者异常,则不回应ACK消息,以使得MCU系统20进行数据重传。
下行重传机制:在Android系统10中的核心层发送数据给MCU系统20的同时,启动定时功能以等待接收MCU系统20反馈的ACK消息,如重传定时器,若超过定时功能中设定的预设时间仍未收到MCU系统20反馈的ACK消息,则重新发送数据包给MCU系统20。
此外,请再次参阅图4,在数据传输时,若cmd1没有在数据体时隙同步发送,而是单独触发cmd1的发送,则在发送cmd1的过程可能会同步读到data1,若data1中包含待发送数据包中的帧头及部分消息体,则丢弃该data1,同时MCU系统20会依照超时重发流程进行数据重发,并按照正常流程触发SPI中断。进一步地,基于对上述数据传输方法的描述,在实际实施时,数据传输模式可以包括双工模式和单工模式,下面对基于双工模式和单工模式的数据传输过程进行描述。
(1)双工模式
如图5所示,MCU系统20每隔预设时间(如10ms等)间隔通过INT信号线12发送SPI中断信号给Android系统10中的内核层,在该内核层接收到SPI中断信号后,Android系统10通过CLK信号线11提供9个clk字节的第一时钟信号给MCU系统20,并通过Miso信号线14读取MCU系统20中的待发送数据包的帧头,根据该帧头判断待发送数据包是否为有效数据,若是,则提供预设长度的clk字节的第二时钟信号给MCU系统20,再次通过Miso信号线14读取MCU系统20中的待发送数据包的消息体。
与此同时,若Android系统10中的内核层存在需要发送给MCU系统20的数据,则需要判断该数据的数据长度是否小于待发送数据包中的数据长度,若小于,则通过Mosi信号线13将数据发送给MCU系统20。此外,在MCU系统20上的数据发送完毕后,MCU系统20可再次发送SPI中断信号以发起数据传输请求,但其中存在几个毫秒的延时。
(2)单工模式
如图6所示,当Miso信号线14上没有数据上传,Android系统10通过Mosi信号线13向MCU系统20发送数据,并通过启动T1定时器进行定时,当T1定时器到时后判断待发送数据是否已被发送,若没有被发送,则基于T2时间片进行数据发送。
进一步地,基于对上述数据传输方法的描述本发明还对数据传输方法的有效性进行了实验验证,其中,实验证明本发明可基于960000波特率的clk时钟信号,实现500kbps40%总线负载的高速、可靠、稳定的全双工数据传输。
如图7所示,为本发明实施例提供的数据传输装置100的方框结构示意图,数据传输装置100包括信号接收模块110、帧头读取模块120、消息体读取模块130、优先级设置模块140、线程调用模块150和数据发送判断模块160。
信号接收模块110,用于接收MCU系统20发送的SPI中断信号。本实施例中,关于信号接收模块110的描述具体可参考上述步骤S110的详细描述,也即,步骤S110可以由信号接收模块110执行,因而在此不作更多说明。
帧头读取模块120,用于根据SPI中断信号提供第一时钟信号给MCU系统20,并基于第一时钟信号读取MCU系统20中待发送数据包的帧头,根据帧头判断该待发送数据包是否为有效数据。
本实施例中,关于帧头读取模块120的描述具体可参考上述步骤S120的详细描述,也即,步骤S120可以由帧头读取模块120执行,因而在此不作更多说明。
消息体读取模块130,用于若待发送数据为有效数据,则提供第二时钟信号给MCU系统20,基于该第二时钟信号读取待发送数据包中的消息体,并在读取完成时发送数据确认信号给MCU系统20。
本实施例中,关于消息体读取模块130的描述具体可参考上述步骤S130的详细描述,也即,步骤S130可以由消息体读取模块130执行,因而在此不作更多说明。可选地,所述消息体读取模块130包括映射单元、读取单元、数据检测单元和数据判断单元。
映射单元,用于内核层申请物理页内存并读取待发送数据包中的消息体以保存在该物理页内存中,并通过vmap方式将物理页内存映射至虚拟内存中。
读取单元,用于应用层通过mmap接口映射位于虚拟内存中的消息体以实现数据读取;以及读取单元还用于应用层访问第一共享向量和第二共享向量,判断第一共享向量和第二共享向量之间进行异或的结果是否为预设值,若是,则应用层持有锁,并在该应用层持有锁的状态下通过mmap接口映射位于虚拟内存中的消息体以实现数据读取。
数据检测单元,用于驱动层检测SPI设备中是否有数据到达,并在有数据到达时驱动POLL接口发送事件侦听指令给应用层;
数据判断单元,用于应用层根据事件侦听指令检测述虚拟内存中是否存在待读取数据,若存在,则执行应用层通过mmap接口映射位于虚拟内存中的消息体以实现数据读取的步骤。
本实施例中,关于读取单元、数据检测单元和数据判断单元的描述具体可参考上述步骤S131-步骤S132的详细描述,因而在此不作更多说明。
优先级设置模块140,用于将SPI处理线程对应的线程调用策略的优先级配置为最高优先级。
线程调用模块150,用于基于SPI中断信号,响应线程调用指令并根据该线程调用指令调用SPI处理线程,并通过SPI处理线程实现帧头读取模块120或/和消息体读取模块130的功能,以及判断SPI处理线程是否正在处理其他SPI事件,若是,则将该SPI事件添加至事件处理队列,并执行调用SPI处理线程的步骤。
数据发送判断模块160,用于判断所述Android系统10需要发送给所述MCU系统20的数据的数据长度是否小于所述MCU系统20发送给所述Android系统10的数据长度,若小于,则所述Android系统10将所述数据发送给所述MCU系统20。
本实施例中,关于优先级设置模块140和线程调用模块150的描述具体可参考上述步骤S110-步骤S130的详细描述,因而在此不作更多说明。
综上所述,本发明实施例提供一种数据传输方法和装置,其中,通过在非实时性的Android操作系统与实时性的MCU系统20之间提供一种可靠的SPI总线传输方式实现Android系统10与MCU系统20之间的实时性数据传输。同时,本发明基于实时性数据的传输能够实现对汽车整个运行场景的大数据分析。
在本发明实施例所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上仅为本发明的可选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种数据传输方法,其特征在于,应用于Android系统,所述Android系统通过外设的串行外设接口SPI总线与车载微控制单元MCU系统连接,所述方法包括:
接收所述MCU系统发送的SPI中断信号;
根据所述SPI中断信号提供第一时钟信号给所述MCU系统,并基于所述第一时钟信号读取所述MCU系统中的待发送数据包的帧头,根据所述帧头判断所述待发送数据包是否为有效数据;
若所述待发送数据为有效数据,则提供第二时钟信号给所述MCU系统,基于所述第二时钟信号读取所述待发送数据包中的消息体,并在读取完成时发送数据确认信号给所述MCU系统。
2.根据权利要求1所述的数据传输方法,其特征在于,在执行接收所述MCU系统发送的SPI中断信号的步骤之前,所述方法还包括:
将SPI处理线程对应的线程调用策略的优先级配置为最高优先级;
在执行提供第一时钟信号给所述MCU系统的步骤之前,所述方法还包括:
基于所述SPI中断信号,响应线程调用指令并根据该线程调用指令对应的线程调用策略调用SPI处理线程,并通过所述SPI处理线程执行提供第一时钟信号给所述MCU系统,直到发送数据确认信号给所述MCU系统的步骤。
3.根据权利要求2所述的数据传输方法,其特征在于,所述根据该线程调用指令调用SPI处理线程的步骤之前,所述方法还包括:
判断所述SPI处理线程是否正在处理其他SPI事件,若是,则将所述其他SPI事件添加至SPI事件处理队列。
4.根据权利要求1所述的数据传输方法,其特征在于,所述Android系统包括内核层和应用层,读取所述待发送数据包中的消息体的步骤包括:
所述内核层申请物理页内存并读取所述待发送数据包中的消息体以保存在该物理页内存中,并通过vmap方式将所述物理页内存映射至虚拟内存中;
所述应用层通过mmap接口映射位于所述虚拟内存中的消息体以实现数据读取。
5.根据权利要求4所述的数据传输方法,其特征在于,所述Android系统还包括驱动层,所述驱动层设置有POLL接口以及用于驱动SPI总线的SPI设备,读取所述待发送数据包中的消息体的步骤还包括:
所述驱动层检测所述SPI设备中是否有数据到达,并在有数据到达时驱动所述POLL接口发送事件侦听指令给所述应用层;
所述应用层根据所述事件侦听指令检测所述述虚拟内存中是否存在待读取数据,若存在,则执行所述应用层通过mmap接口映射位于所述虚拟内存中的消息体以实现数据读取的步骤。
6.根据权利要求4所述的数据传输方法,其特征在于,所述虚拟内存中设置有用于实现锁机制的第一共享向量和第二共享向量,所述应用层通过mmap接口映射位于所述虚拟内存中的消息体以实现数据读取的过程包括:
所述应用层访问所述第一共享向量和第二共享向量,判断所述第一共享向量和第二共享向量之间进行异或的结果是否为预设值,若是,则所述应用层持有锁,并在该应用层持有锁的状态下通过mmap接口映射位于所述虚拟内存中的消息体以实现数据读取。
7.根据权利要求1所述的数据传输方法,其特征在于,在所述Android系统接收所述MCU系统传输的数据时,当所述Android系统存在需要发送给所述MCU系统的数据,所述方法还包括:
判断所述Android系统需要发送给所述MCU系统的数据的数据长度是否小于所述MCU系统发送给所述Android系统的数据长度,若小于,则所述Android系统将所述数据发送给所述MCU系统。
8.一种数据传输装置,其特征在于,应用于Android系统,所述Android系统通过外设的SPI总线与MCU系统连接,所述装置包括:
信号接收模块,用于接收所述MCU系统发送的SPI中断信号;
帧头读取模块,用于根据所述SPI中断信号提供第一时钟信号给所述MCU系统,并基于所述第一时钟信号读取所述MCU系统中待发送数据包的帧头,根据所述帧头判断所述待发送数据包是否为有效数据;
消息体读取模块,用于若所述待发送数据为有效数据,则提供第二时钟信号给所述MCU系统,基于所述第二时钟信号读取所述待发送数据包中的消息体,并在读取完成时发送数据确认信号给所述MCU系统。
9.根据权利要求8所述的数据传输装置,其特征在于,所述装置还包括:
优先级设置模块,用于将SPI处理线程对应的线程调用策略的优先级配置为最高优先级;
线程调用模块,用于基于所述SPI中断信号,响应线程调用指令并根据该线程对应的线程调用策略调用指令调用SPI处理线程,并通过SPI处理线程实现所述帧头读取模块或/和所述消息体读取模块的功能。
10.根据权利要求9所述的数据传输装置,其特征在于,所述线程调用模块还用于判断所述SPI处理线程是否正在处理其他SPI事件,若是,则将所述其他SPI事件添加至SPI事件处理队列,并执行调用所述SPI处理线程的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810043515.8A CN108132896B (zh) | 2018-01-17 | 2018-01-17 | 数据传输方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810043515.8A CN108132896B (zh) | 2018-01-17 | 2018-01-17 | 数据传输方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108132896A true CN108132896A (zh) | 2018-06-08 |
CN108132896B CN108132896B (zh) | 2020-06-09 |
Family
ID=62399987
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810043515.8A Active CN108132896B (zh) | 2018-01-17 | 2018-01-17 | 数据传输方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108132896B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108819848A (zh) * | 2018-06-14 | 2018-11-16 | 苏州途驰安电子科技有限公司 | 基于监听模式的里程数据获取方法及装置 |
CN109525473A (zh) * | 2018-11-28 | 2019-03-26 | 深圳市元征科技股份有限公司 | 一种mcu扩展can方法、系统、mcu及计算机介质 |
CN110611517A (zh) * | 2018-06-14 | 2019-12-24 | 上汽通用汽车有限公司 | 一种车载终端及具有该车载终端的车辆 |
CN111130710A (zh) * | 2019-12-10 | 2020-05-08 | 常州新途软件有限公司 | 一种基于spi的双工通信方法 |
CN111522769A (zh) * | 2020-03-26 | 2020-08-11 | 成都天箭科技股份有限公司 | 一种多线程spi通信数据传输方法 |
CN111625487A (zh) * | 2020-04-17 | 2020-09-04 | 惠州市德赛西威汽车电子股份有限公司 | 一种spi通信系统及其通信方法 |
CN112235076A (zh) * | 2020-09-17 | 2021-01-15 | 苏州挚途科技有限公司 | 提高双系统之间通信速率的方法、系统与处理器 |
CN113422756A (zh) * | 2021-05-26 | 2021-09-21 | 鹏城实验室 | 验证数据传输方法、速率转换装置以及验证数据传输系统 |
CN113874245A (zh) * | 2019-09-09 | 2021-12-31 | 株式会社Lg新能源 | 通信控制器、通信方法和电动车辆 |
CN114356825A (zh) * | 2021-12-17 | 2022-04-15 | 郑州信大捷安信息技术股份有限公司 | 一种基于芯片的spi双路通信方法和系统 |
CN114443549A (zh) * | 2021-11-23 | 2022-05-06 | 南京林洋电力科技有限公司 | 一种基于特征码流识别的spi通信方法 |
CN116846517A (zh) * | 2023-08-31 | 2023-10-03 | 之江实验室 | 一种网络数据的传输方法、装置、存储介质及电子设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08189942A (ja) * | 1995-01-10 | 1996-07-23 | Alps Electric Co Ltd | パルス幅計測装置 |
US20120089754A1 (en) * | 2010-10-08 | 2012-04-12 | Su Wei-Lu | Hybrid serial peripheral interface data transmission architecture and method of the same |
US20140136738A1 (en) * | 2012-11-15 | 2014-05-15 | Scott E. Matlock | Emulated legacy bus operation over a bit-serial bus |
CN104583995A (zh) * | 2012-10-03 | 2015-04-29 | 英特尔公司 | 跨处理系统的桥接和集成装置 |
CN104933004A (zh) * | 2015-06-24 | 2015-09-23 | 上海市共进通信技术有限公司 | 使用spi总线扩展cpu模块的系统及方法 |
CN105005058A (zh) * | 2015-07-23 | 2015-10-28 | 柳州市百思得信息技术有限公司 | 基于Android平台的北斗和GPS双模在线定位方法 |
CN105005059A (zh) * | 2015-06-26 | 2015-10-28 | 泰斗微电子科技有限公司 | 一种原始观测量数据在android终端中的传输方法及相应的终端 |
CN105824777A (zh) * | 2016-03-18 | 2016-08-03 | 烽火通信科技股份有限公司 | 一种spi总线在ipran设备中的实现方法 |
CN107172133A (zh) * | 2017-04-27 | 2017-09-15 | 华东师范大学 | 基于车辆总线记录设备的车辆实时排放分析系统及其方法 |
US20170344502A1 (en) * | 2016-05-28 | 2017-11-30 | Silicon Laboratories Inc. | Communication Apparatus with Direct Control and Associated Methods |
-
2018
- 2018-01-17 CN CN201810043515.8A patent/CN108132896B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08189942A (ja) * | 1995-01-10 | 1996-07-23 | Alps Electric Co Ltd | パルス幅計測装置 |
US20120089754A1 (en) * | 2010-10-08 | 2012-04-12 | Su Wei-Lu | Hybrid serial peripheral interface data transmission architecture and method of the same |
CN104583995A (zh) * | 2012-10-03 | 2015-04-29 | 英特尔公司 | 跨处理系统的桥接和集成装置 |
US20140136738A1 (en) * | 2012-11-15 | 2014-05-15 | Scott E. Matlock | Emulated legacy bus operation over a bit-serial bus |
CN104933004A (zh) * | 2015-06-24 | 2015-09-23 | 上海市共进通信技术有限公司 | 使用spi总线扩展cpu模块的系统及方法 |
CN105005059A (zh) * | 2015-06-26 | 2015-10-28 | 泰斗微电子科技有限公司 | 一种原始观测量数据在android终端中的传输方法及相应的终端 |
CN105005058A (zh) * | 2015-07-23 | 2015-10-28 | 柳州市百思得信息技术有限公司 | 基于Android平台的北斗和GPS双模在线定位方法 |
CN105824777A (zh) * | 2016-03-18 | 2016-08-03 | 烽火通信科技股份有限公司 | 一种spi总线在ipran设备中的实现方法 |
US20170344502A1 (en) * | 2016-05-28 | 2017-11-30 | Silicon Laboratories Inc. | Communication Apparatus with Direct Control and Associated Methods |
CN107172133A (zh) * | 2017-04-27 | 2017-09-15 | 华东师范大学 | 基于车辆总线记录设备的车辆实时排放分析系统及其方法 |
Non-Patent Citations (1)
Title |
---|
韩勇: "《车身控制器的设计》", 《中国优秀硕士学位论文全文数据库 工程科技Ⅱ辑》 * |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110611517A (zh) * | 2018-06-14 | 2019-12-24 | 上汽通用汽车有限公司 | 一种车载终端及具有该车载终端的车辆 |
CN108819848A (zh) * | 2018-06-14 | 2018-11-16 | 苏州途驰安电子科技有限公司 | 基于监听模式的里程数据获取方法及装置 |
CN108819848B (zh) * | 2018-06-14 | 2021-07-20 | 苏州途驰安电子科技有限公司 | 基于监听模式的里程数据获取方法及装置 |
CN109525473A (zh) * | 2018-11-28 | 2019-03-26 | 深圳市元征科技股份有限公司 | 一种mcu扩展can方法、系统、mcu及计算机介质 |
CN109525473B (zh) * | 2018-11-28 | 2021-05-04 | 深圳市元征科技股份有限公司 | 一种mcu扩展can方法、系统、mcu及计算机介质 |
CN113874245A (zh) * | 2019-09-09 | 2021-12-31 | 株式会社Lg新能源 | 通信控制器、通信方法和电动车辆 |
CN113874245B (zh) * | 2019-09-09 | 2024-03-01 | 株式会社Lg新能源 | 通信控制器、通信方法和电动车辆 |
EP3919317A4 (en) * | 2019-09-09 | 2022-05-18 | LG Energy Solution, Ltd. | COMMUNICATION CONTROL DEVICE, COMMUNICATION METHOD AND ELECTRIC VEHICLE |
CN111130710A (zh) * | 2019-12-10 | 2020-05-08 | 常州新途软件有限公司 | 一种基于spi的双工通信方法 |
CN111522769B (zh) * | 2020-03-26 | 2023-05-26 | 成都天箭科技股份有限公司 | 一种多线程spi通信数据传输方法 |
CN111522769A (zh) * | 2020-03-26 | 2020-08-11 | 成都天箭科技股份有限公司 | 一种多线程spi通信数据传输方法 |
CN111625487A (zh) * | 2020-04-17 | 2020-09-04 | 惠州市德赛西威汽车电子股份有限公司 | 一种spi通信系统及其通信方法 |
CN112235076A (zh) * | 2020-09-17 | 2021-01-15 | 苏州挚途科技有限公司 | 提高双系统之间通信速率的方法、系统与处理器 |
CN112235076B (zh) * | 2020-09-17 | 2023-02-17 | 苏州挚途科技有限公司 | 提高双系统之间通信速率的方法、系统与处理器 |
CN113422756A (zh) * | 2021-05-26 | 2021-09-21 | 鹏城实验室 | 验证数据传输方法、速率转换装置以及验证数据传输系统 |
CN114443549A (zh) * | 2021-11-23 | 2022-05-06 | 南京林洋电力科技有限公司 | 一种基于特征码流识别的spi通信方法 |
CN114443549B (zh) * | 2021-11-23 | 2024-03-12 | 南京林洋电力科技有限公司 | 一种基于特征码流识别的spi通信方法 |
CN114356825A (zh) * | 2021-12-17 | 2022-04-15 | 郑州信大捷安信息技术股份有限公司 | 一种基于芯片的spi双路通信方法和系统 |
CN114356825B (zh) * | 2021-12-17 | 2024-02-13 | 郑州信大捷安信息技术股份有限公司 | 一种基于芯片的spi双路通信方法和系统 |
CN116846517A (zh) * | 2023-08-31 | 2023-10-03 | 之江实验室 | 一种网络数据的传输方法、装置、存储介质及电子设备 |
CN116846517B (zh) * | 2023-08-31 | 2024-01-02 | 之江实验室 | 一种网络数据的传输方法、装置、存储介质及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN108132896B (zh) | 2020-06-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108132896A (zh) | 数据传输方法和装置 | |
US10108511B2 (en) | Test for 50 nanosecond spike filter | |
EP0137437B1 (en) | Method for initializing a token-passing local-area network | |
CN109981480A (zh) | 一种数据传输方法及第一设备 | |
CN104620311B (zh) | 存储器控制装置和便携终端 | |
JPH053941B2 (zh) | ||
US5107456A (en) | Interface device for interfacing a network station to a physical network medium | |
CN110460412A (zh) | 用于数据传输的方法和rdma网卡 | |
US20220061119A1 (en) | Accelerating control procedures over ble connection oriented services | |
US8863135B2 (en) | Preemptive smart card access and data transfer based on application priority | |
CN109709905A (zh) | 通信处理装置、存储介质和通信处理方法 | |
CN109240947A (zh) | 智能卡数据接收方法及装置 | |
US20210173808A1 (en) | Early parity error detection on an i3c bus | |
CN109951255A (zh) | 一种基于tcp的数据传输方法、系统、源设备、及目标设备 | |
CN115378873A (zh) | 一种提高以太网数据传输效率的流量控制方法和系统 | |
CN101369867A (zh) | 通用手持编程器通信控制方法 | |
CN104601289B (zh) | 电子设备及信息处理方法 | |
CN112040063A (zh) | 一种手机与obu之间的蓝牙数据信息传送方法 | |
CN112732618B (zh) | 一种串口通信方法、装置和系统 | |
CN112577160B (zh) | 空调的控制方法、系统及空调器 | |
CN111801955B (zh) | 一种数据传输的方法、低功耗蓝牙装置和低功耗蓝牙芯片 | |
CN115357414B (zh) | 基于SystemC和C++的多线程数据传输系统 | |
CN114500052B (zh) | 一种基于事件驱动的高效数据加密转发方法及装置 | |
US8631176B2 (en) | Asynchronous communications technique | |
CN106301709A (zh) | Usb电子装置及数据包重传控制方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |