CN104965700B - VxWorks操作系统下实现驱动SPI设备的方法和系统 - Google Patents

VxWorks操作系统下实现驱动SPI设备的方法和系统 Download PDF

Info

Publication number
CN104965700B
CN104965700B CN201510312959.3A CN201510312959A CN104965700B CN 104965700 B CN104965700 B CN 104965700B CN 201510312959 A CN201510312959 A CN 201510312959A CN 104965700 B CN104965700 B CN 104965700B
Authority
CN
China
Prior art keywords
spi
frame
data
inner nuclear
nuclear layer
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.)
Active
Application number
CN201510312959.3A
Other languages
English (en)
Other versions
CN104965700A (zh
Inventor
丁明伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Aerospace Ouhua Information Technology Co ltd
Original Assignee
Aerospace Science and Industry Shenzhen Group Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Aerospace Science and Industry Shenzhen Group Co Ltd filed Critical Aerospace Science and Industry Shenzhen Group Co Ltd
Priority to CN201510312959.3A priority Critical patent/CN104965700B/zh
Publication of CN104965700A publication Critical patent/CN104965700A/zh
Application granted granted Critical
Publication of CN104965700B publication Critical patent/CN104965700B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明涉及VxWorks操作系统下实现驱动SPI设备的方法和系统。VxWorks操作系统包括应用层、内核层和SPI设备驱动层,其方法包括:从SPI设备驱动层获取自定义的SPI设备组件描述文件和SPI驱动注册函数原型;根据自定义的SPI设备组件描述文件和SPI驱动注册函数原型,形成SPI驱动的编译规则;根据编译规则在内核层注册SPI驱动,并初始化SPI驱动,初始化SPI驱动的步骤包括设置SPI驱动中断及其对应的操作,及在内核层设置发送缓存区和接收缓存区;SPI设备驱动层通过SPI驱动中断与内核层的发送缓存区和接收缓存区进行数据交互;内核层通过应用程序接口与应用层进行数据交互。上述的VxWorks操作系统下实现驱动SPI设备的方法和系统,能够降低代码的耦合程度,提高SPI通信的稳定性和可靠性。

Description

VxWorks操作系统下实现驱动SPI设备的方法和系统
技术领域
本发明涉及配电自动化技术领域,特别是涉及一种VxWorks操作系统下实现驱动SPI设备的方法和系统。
背景技术
目前,美国Wind River公司提供的开发平台Wind River WorkBench 3.3开发平台并没有提供标准的SPI(Serial Peripheral Interface,串行外设接口)驱动开发模型,业内VxWorks操作系统下驱动开发工程师主要采用单片机的SPI驱动开发模型和传统的I/O设备驱动模型开发模型开发SPI设备驱动。
(1)单片机的SPI驱动开发模型
单片机的SPI驱动开发模型是自定义的一种驱动开发模型,驱动开发过程中需要完成如下工作:编写缓存的建立、初始化、增加数据,取数据接口;SPI设备的初始化接口;中断关联,中断处理程序中对SPI设备异常、接收数据、发送数据处理以及和缓存的交互;为上层软件提供非标准的初始化、读数据、写数据、得到链路状态、设置SPI设备属性等接口。
(2)传统的I/O设备驱动模型开发模型
VxWorks系统下,也经常采用传统的I/O设备驱动开发模型开发SPI设备驱动,驱动开发过程中同样需要做如下工作:开发自定义的缓存相关接口;编写提供给应用层的接口;中断关联,中断处理程序中对设备异常、收发数据处理及缓存的交互;spi设备的初始化等。
上述两种VxWorks系统下SPI驱动开发模型在实际使用过程中,都存在应用层和驱动层代码耦合严重,不利于代码维护的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种VxWorks操作系统下实现驱动SPI设备的方法和系统。其能够降低代码的耦合程度,提高SPI通信的稳定性和可靠性。
一种VxWorks操作系统下实现驱动SPI设备的方法,所述VxWorks操作系统包括应用层、内核层和SPI设备驱动层,所述方法包括:
从所述SPI设备驱动层获取自定义的SPI设备组件描述文件和SPI驱动注册函数原型;
根据所述自定义的SPI设备组件描述文件和SPI驱动注册函数原型,形成SPI驱动的编译规则;
根据所述编译规则在所述内核层注册SPI驱动,并初始化所述SPI驱动,所述初始化所述SPI驱动的步骤包括根据SPI驱动中断获取其对应的中断服务操作,及在内核层设置发送缓存区和接收缓存区;
所述SPI设备驱动层通过所述SPI驱动中断与所述内核层的发送缓存区和接收缓存区进行数据交互;
所述内核层通过应用程序接口与所述应用层进行数据交互。
在其中一些实施例中,所述初始化所述SPI驱动的步骤还包括:配置SPI设备的外设属性,所述配置SPI设备的外设属性包括配置SPI主设备和SPI从设备。
在其中一些实施例中,所述SPI主设备和所述SPI从设备之间通过SPI协议帧进行通信,每个所述SPI协议帧包括第一spi数据包字段、第二spi数据包字段和spi数据包长度字段。
在其中一些实施例中,所述SPI协议帧的类型包括:心跳帧、命令帧、数据帧、链路正常帧和链路异常帧;
所述SPI主设备和所述SPI从设备之间通过SPI协议帧进行通信的过程包括:链路建立步骤、SPI主设备召唤数据的步骤和SPI主设备发送数据过程的步骤;
所述链路建立步骤包括:
所述SPI主设备发送所述心跳帧至所述SPI从设备;
所述SPI从设备接收到所述心跳帧后,判断链路是否正常,如果链路正常,则发送所述链路正常帧至所述SPI主设备;
所述SPI主设备接收到所述链路正常帧后,完成链路建立;
所述SPI主设备召唤数据的步骤包括:
所述SPI主设备发送命令帧至所述SPI从设备;
所述SPI从设备接收到所述命令帧后,判断链路是否正常,若链路正常且所述SPI从设备对应的内核层的发送缓存区有数据,则发送数据给所述SPI主设备,若链路异常,则发送链路异常帧至所述SPI主设备;
所述SPI主设备发送数据过程的步骤包括:
所述SPI主设备发送所述数据帧至所述SPI从设备后,连续发送所述SPI主设备对应的内核层的发送缓存区中的数据;
所述SPI从设备接收到所述数据帧后,接收所述SPI主设备发送的数据并保存数据到所述SPI从设备对应的内核层接收缓存区。
在其中一些实施例中,所述SPI设备驱动层通过所述SPI驱动中断与所述内核层的发送缓存区和接收缓存区进行数据交互的过程包括:
通过SPI设备的中断状态寄存器获取所述SPI设备产生的中断;
判断所述中断的类型;
若所述中断是SPI设备异常中断,则按照异常处理并打印异常日志;
若所述中断是SPI设备接收数据中断,则接收数据到内核层的接收缓存区;
若所述中断是SPI设备的发送数据中断,则发送数据到内核层的发送缓存区。
一种VxWorks操作系统下实现驱动SPI设备的系统,所述系统包括:
SPI设备驱动层,用于获取自定义的SPI设备组件描述文件和SPI驱动注册函数原型,根据所述自定义的SPI设备组件描述文件和SPI驱动注册函数原型,形成SPI驱动的编译规则,该述SPI设备驱动层包括SPI设备和SPI驱动单元,所述SPI驱动单元用于根据SPI驱动中断获取其对应的中断服务操作;
包括发送缓冲区和接收缓冲区的内核层,用于根据所述编译规则在所述内核层注册SPI驱动,所述内核层通过所述SPI驱动中断与所述SPI设备驱动层进行数据交互;以及
应用层,所述应用层通过应用程序接口与所述内核层进行数据交互。
在其中一些实施例中,所述SPI设备还包括中断状态寄存器,所述SPI驱动单元用于通过读取所述中断状态寄存器的状态获取所述SPI设备产生的中断,通过判断所述中断的类型,来当所述中断是SPI设备异常中断,按照异常处理并打印异常日志;当所述中断是SPI设备接收数据中断,接收数据到内核层的接收缓存区;当所述中断是SPI设备的发送数据中断,发送数据到内核层的发送缓存区。
在其中一些实施例中,所述SPI驱动单元还用于配置SPI设备的外设属性,所述配置SPI设备的外设属性包括配置SPI主设备和SPI从设备。
在其中一些实施例中,所述SPI主设备和所述SPI从设备之间通过SPI协议帧进行通信,每个所述SPI协议帧包括第一spi数据包字段、第二spi数据包字段和spi数据包长度字段。
在其中一些实施例中,所述SPI协议帧的类型包括:心跳帧、命令帧、数据帧、链路正常帧和链路异常帧;所述SPI主设备和所述SPI从设备之间通过SPI协议帧进行通信;
所述SPI主设备发送所述心跳帧至所述SPI从设备,所述SPI从设备接收到所述心跳帧后对链路是否正常进行判断,当链路正常时向所述SPI主设备发送所述链路正常帧,所述SPI主设备接收到所述链路正常帧后完成链路建立;
所述SPI主设备发送命令帧至所述SPI从设备,所述SPI从设备接收到所述命令帧后对链路是否正常进行判断,并在链路正常且所述SPI从设备对应的内核层的发送缓存区有数据时向所述SPI主设备发送数据,当链路异常时向所述SPI主设备发送链路异常帧;
所述SPI主设备发送所述数据帧至所述SPI从设备,且连续发送所述SPI主设备对应的内核层的发送缓存区中的数据;所述SPI从设备接收到所述数据帧,并将所述SPI主设备发送的数据保存到所述SPI从设备对应的内核层接收缓存区。
上述的VxWorks操作系统下实现驱动SPI设备的方法和系统,根据自定义的SPI设备组件描述文件和SPI驱动注册函数原型,形成SPI驱动的编译规则,并根据编译规则注册并初始化SPI驱动,降低了内核层和SPI设备间的代码的耦合程度,提高了SPI通信的稳定性、可靠性和速率,同时提高了系统性能和精准度。
附图说明
图1为一个实施例中VxWorks操作系统的结构框图;
图2为一个实施例的VxWorks操作系统下实现驱动SPI设备的方法的流程图;
图3为一个实施例的SPI协议帧的结构示意图;
图4为一个实施例的SPI主、从设备间通信过程示意图;
图5为一个实施例的SPI设备驱动层通过SPI驱动中断与内核层的发送缓存区和接收缓存区进行数据交互的过程示意图;
图6为一个实施例的VxWorks操作系统下实现驱动SPI设备的系统框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1为VxWorks操作系统下实现驱动SPI设备的结构框架图,VxWorks操作系统包括应用层、内核层和SPI设备驱动层。应用层包括用户的应用软件和应用程序。内核层包括I/O子系统,I/O子系统中设置有系统驱动表、系统设备表和系统文件描述符表。为提高数据传输的效率,内核层还设置有发送缓冲区和接收缓冲区。API(Application ProgrammingInterface,应用程序接口)为用户提供了一套标准接口函数,用户可以无视底层设备类型,对所有的设备都使用这一套接口函数进行操作,由I/O子系统根据设备类型调用不同的底层驱动进行响应。接口函数包括open、creat、read、write、ioctl、close、remove等。
如图2所示,在本发明的一个实施例中,提供一种VxWorks操作系统下实现驱动SPI设备的方法,该方法包括:
步骤102,从SPI设备驱动层获取自定义的SPI设备组件描述文件和SPI驱动注册函数原型。
在本实施例中,SPI设备驱动层包括SPI设备和SPI驱动单元。在SPI驱动单元设置有用户自定义的SPI设备组件描述文件和SPI驱动注册函数原型。例如,SPI设备组件描述文件可以设置为40at91sam9x25Spi.cdf,SPI驱动注册函数原型可以设置为at91sam9x25Spi.dc。SPI驱动注册函数原型中可以包括SPI驱动初始化函数(如xxxDrv,xxxDevCreat)和SPI驱动服务函数(如xxxOpen、xxxRead、xxxWrite等)等。
步骤104,根据自定义的SPI设备组件描述文件和SPI驱动注册函数原型,形成SPI驱动的编译规则。
在本实施例中,根据SPI驱动单元预先设置好的用户自定义的SPI设备组件描述文件和SPI驱动注册函数原型,形成SPI的驱动的编译规则。该编译规则可以以Makefile文件的形式存储在SPI驱动单元。同时还可以根据该编译规则编写SPI驱动注册函数代码段并存储在SPI驱动单元。
步骤106,根据编译规则在内核层注册SPI驱动,并初始化SPI驱动,初始化SPI驱动的步骤包括根据SPI驱动中断获取中断对应的中断服务操作,及在内核层设置发送缓存区和接收缓存区。
在本实施例中,为提高内核层与SPI设备驱动层的数据传输效率,在内核层设置一个TTY中间层,并在TTY中间层设置了发送缓冲区和接收缓冲区,同时创建TTY设备。TTY串口驱动的部分可以分为与硬件相关部分和与硬件无关部分。VxWorks操作系统的串口驱动与硬件无关部分主要有两个函数库来实现,一是ttyDrv函数库,另一个是tyLib函数库,其提供了tyRead、tyWrite两个函数,这两个函数主要用于完成发送缓冲区和接收缓冲区的数据处理。tyLib函数在ttyDrv库与底层硬件操作之间建立了发送缓冲区和接收缓冲区,当上层函数需要接收数据时并不是直接读取硬件的接收寄存器,而是调用函数tyRead读取tyLib的接收缓冲区,同样在发送数据时也是通过调用tyWrite函数将数据发送给tyLib的发送缓冲区中。
在本实施例中,创建TTY设备包括:注册SPI设备和初始化SPI驱动。根据获取的编译规则通过内核层(iosLib)提供的对下接口函数iosDrvInstall和iosDevAdd向内核层的I/O子系统注册SPI驱动、初始化SPI驱动以及配置SPI设备资源。配置SPI资源包括向内核层的系统设备表中添加SPI设备、设置SPI设备内存映射地址、关联的中断ID(Identity,标识)等。
初始化SPI驱动的步骤包括根据SPI驱动中断获取其对应的中断服务操作。SPI驱动中断包括设备异常中断、接收数据中断和发送数据中断。不同的中断类型对应着不同的操作。
初始化SPI驱动的步骤还包括:
(a)配置SPI设备的MISO、MOSI、CLK、CS的引脚;
(b)通过SPI设备的控制寄存器和模式寄存器配置SPI外设属性,如主、从设备、片选等;
(c)通过SPI设备的片选寄存器配置片选的时钟、波特率等属性;
(d)通过SPI中断禁用寄存器禁用所有的外设中断源;
(e)通过SPI中断使能寄存器使能SPI的接收中断;
(f)使能SPI设备。
TTY中间层的ttyDrv()函数是一个虚拟的驱动,既和I/O子系统交互,同时又和SPI驱动单元交互。它调用iosDrvInstall()将ttyDrv和tyLib中的函数安装到内核层的系统驱动程序表中。ttyDrv负责ttyOpen、ttyIoctl的接入,tyLib负责tyRead、tyWrite的接入。
这样初始化完成后,通过内核层I/O子系统的对上接口函数使得SPI设备将对应用层的用户可见,SPI驱动单元设置的驱动函数随时等待I/O子系统的调用。
步骤108,SPI设备驱动层通过SPI驱动中断与内核层的发送缓存区和接收缓存区进行数据交互。
在本实施例中,通过读取SPI设备的中断状态寄存器获取中断类型,针对不同的中断类型,实现SPI设备驱动层与内核层的发送缓存区和接收缓存区进行数据交互。
步骤110,内核层通过应用程序接口与应用层进行数据交互。
在本实施例中,应用层用户通过标准的应用程序接口(API)发送对目标数据的调用请求。例如,用户可以调用ioLib中的write()、read()函数对串口进行读、写操作。
例如,以一个具体的示例来说明用户发送调用请求到SPI设备驱动层的传递过程如下:
(1)用户通过API的open()函数发送open调用请求;
(2)由于SPI驱动通过xxxDevCreate注册SPI设备时,在每个设备结构中都存储了该设备的驱动号(xxxDrv函数调用时产生),因此I/O子系统可根据设备列表中的设备结构直接查询到该设备对应的驱动程序;
(3)当I/O子系统以文件路径名在系统设备列表中匹配到一个设备时,其直接根据存储在设备结构中的驱动号在系统驱动表中获得对应的SPI设备驱动,并调用open SPI驱动响应函数x_open,完成应用层打开设备请求。
上述的VxWorks操作系统下实现驱动SPI设备的方法和系统,根据自定义的SPI设备组件描述文件和SPI驱动注册函数原型,形成SPI驱动的编译规则,并根据编译规则注册并初始化SPI驱动,降低了内核层和SPI设备间的代码的耦合程度,提高了SPI通信的稳定性、可靠性和速率,同时提高了系统性能和精准度。
在本发明的其中一个实施例中,初始化所述SPI驱动的步骤还包括:配置SPI设备的外设属性,配置SPI设备的外设属性包括配置SPI主设备和SPI从设备。上述SPI设备包括SPI主设备和一个或多个SPI从设备。
进一步的,在一个实施例中,SPI主设备和SPI从设备之间通过SPI协议帧进行通信。每个SPI协议帧包括第一spi数据包字段、第二spi数据包字段和spi数据包长度字段,如图3所示,SPI协议帧的长度为四个字节:第一spi数据包字段(spiPacketType1)一个字节、第二spi数据包字段(spiPacketType2)一个字节、数据包长度字段(spiPacketSize)两个字节。第一spi数据包字段(spiPacketType1)和第二spi数据包字段(spiPacketType2)用于表示SPI协议帧的类型,数据包长度字段(spiPacketSize)用于表示SPI协议帧的不同类型的帧所携带的数据。
根据第一spi数据包字段(spiPacketType1)和第二spi数据包字段(spiPacketType2)可以将SPI协议帧的类型分为:心跳帧、命令帧、数据帧、链路正常帧和链路异常帧。
(1)心跳帧,用于SPI主设备和SPI从设备建立链路;
(2)命令帧,用于用户召唤SPI从设备的链路状态,SPI从设备发送的数据;
(3)数据帧,用于SPI主设备发送数据给SPI从设备;
(4)链路正常帧,用于表示目前链路正常;
(5)链路异常帧,用于表示目前链路异常。
需要说明的是,数据包长度字段(spiPacketSize)包括表征长度的字节和数据段字节。例如图3所示的SPI帧结构中,数据帧的0xFE(spiPacketType1)和0xDC(spiPacketType2)表示数据帧的类型,len和data分别表示数据帧携带的数据的长度和数据段。另外,心跳帧、命令帧、链路正常帧和链路异常帧的帧结构中的0表示未携带数据。
如图4所示,在一个实施例中,SPI主设备和所述SPI从设备之间通过SPI协议帧进行通信的过程包括:链路建立步骤、SPI主设备召唤数据的步骤和SPI主设备发送数据过程的步骤。
(a)链路建立步骤包括:
SPI主设备发送心跳帧至SPI从设备;
SPI从设备接收到心跳帧后,判断链路是否正常,如果链路正常,则发送链路正常帧至SPI主设备;反之,不处理。
在SPI主设备接收到链路正常帧后,完成链路建立;
(b)SPI主设备召唤数据的步骤包括:
所述SPI主设备发送命令帧至SPI从设备;
SPI从设备接收到命令帧后,判断链路是否正常,若链路正常且SPI从设备对应的内核层的发送缓存区有数据,则发送数据给SPI主设备,若链路异常,则发送链路异常帧至SPI主设备;
(c)SPI主设备发送数据过程的步骤包括:
SPI主设备发送数据帧至SPI从设备后,连续发送SPI主设备对应的内核层的发送缓存区中的数据;
SPI从设备接收到数据帧后,接收SPI主设备发送的数据并保存数据到SPI从设备对应的内核层接收缓存区。
同样的,SPI从设备发送数据的过程与SPI主设备发送数据的过程相同,即,SPI从设备发送数据帧至SPI主设备后,连续发送SPI从设备对应的内核层的发送缓存区中的数据;SPI主设备接收到数据帧后,接收SPI从设备发送的数据并保存数据到SPI主设备对应的内核层接收缓存区。
这样,基于SPI驱动的CPU间SPI主、从设备之间的通信,降低了CPU间SPI对等通讯编码难度和上层应用软件的开发难度,提高了稳定性,极大的发挥了SPI的通信性能。
如图5所示,在一个实施例中,SPI设备驱动层通过SPI驱动中断与内核层的发送缓存区和接收缓存区进行数据交互的过程包括:
步骤502,通过SPI设备的中断状态寄存器获取SPI设备产生的中断,并判断中断的类型。步骤504,判断中断是否为SPI设备的异常中断,若是,则执行步骤506,若否,则执行步骤508。
步骤506,按照异常处理并打印异常日志。
步骤508,判断中断是否为SPI设备的接收数据中断,若是,则执行步骤510,若否,则执行步骤512。
步骤510,接收数据到内核单元104的接收缓存区。
步骤512,判断中断是否为SPI设备的发送数据中断,若是,则执行步骤514,若否,则结束中断处理过程。
步骤514,发送数据到内核层的发送缓存区。
通过读取SPI设备的中断状态寄存器的状态判断中断的类型,并针对不同的类型采取不同的操作,提高了SPI设备驱动层和内核层的数据交互的效率和精确度。
需要说明的是,基于上述实施例,当SPI主设备与SPI从设备之间进行通信时,SPI设备包括SPI主设备和SPI从设备,需要分别从SPI主设备和SPI从设备的中断状态寄存器中获取中断并判断其类型。SPI主、从设备的SPI驱动单元将根据SPI主、从设备的中断类型采取对应的中断服务。
在另一个实施例中,如图6所示,提供一种VxWorks操作系统下实现驱动SPI设备的系统,该系统包括:SPI设备驱动层102、内核层104和应用层106。
SPI设备驱动层102,用于获取自定义的SPI设备组件描述文件和SPI驱动注册函数原型,根据自定义的SPI设备组件描述文件和SPI驱动注册函数原型,形成SPI驱动的编译规则,该SPI设备驱动层102包括SPI设备122和SPI驱动单元142。SPI驱动单元142用于根据SPI驱动中断获取中断对应的中断服务操作。内核层104包括发送缓冲区和接收缓冲区,内核层104用于根据编译规则在内核层104注册SPI驱动,通过SPI驱动中断与SPI设备驱动层102进行数据交互。应用层106通过应用程序接口与内核层104进行数据交互。
在一个实施例中,SPI设备122还包括中断状态寄存器,SPI驱动单元142通过读取中断状态寄存器的状态获取SPI设备122产生的中断。SPI驱动单元142通过判断中断的类型,来当中断是SPI设备异常中断时,按照异常处理并打印异常日志;当中断是SPI设备接收数据中断时,接收数据到内核层的接收缓存区;当中断是SPI设备的发送数据中断时,发送数据到内核层104的发送缓存区。
在一个实施例中,SPI驱动单元142还用于配置SPI设备的外设属性,配置SPI设备的外设属性包括配置SPI主设备和SPI从设备。
进一步的,在一个实施例中,SPI主设备和SPI从设备之间通过SPI协议帧进行通信,每个SPI协议帧包括第一spi数据包字段、第二spi数据包字段和spi数据包长度字段。
在一个实施例中,SPI协议帧的类型包括:心跳帧、命令帧、数据帧、链路正常帧和链路异常帧;所述SPI主设备和所述SPI从设备之间通过SPI协议帧进行通信;
SPI主设备发送心跳帧至SPI从设备,SPI从设备接收到心跳帧后对链路是否正常进行判断,当链路正常时向SPI主设备发送所述链路正常帧,SPI主设备接收到链路正常帧后完成链路建立;
SPI主设备发送命令帧至SPI从设备,SPI从设备接收到命令帧后对链路是否正常进行判断,并在链路正常且SPI从设备对应的内核层的发送缓存区有数据时向SPI主设备发送数据,当链路异常时向SPI主设备发送链路异常帧;
SPI主设备发送数据帧至SPI从设备,且连续发送SPI主设备对应的内核层的发送缓存区中的数据,SPI从设备接收到数据帧,并将SPI主设备发送的数据保存到SPI从设备对应的内核层接收缓存区。此外,SPI从设备发送数据帧至SPI主设备,且连续发送SPI从设备对应的内核层的发送缓存区中的数据,SPI主设备接收到数据帧,并将SPI从设备发送的数据保存到SPI主设备对应的内核层接收缓存区。
需要说明的是,本实施例的VxWorks操作系统下实现驱动SPI设备的系统的具体实施过程,可参见方法实施例部分,在此不再赘述。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

Claims (10)

1.一种VxWorks操作系统下实现驱动SPI设备的方法,所述VxWorks操作系统包括应用层、内核层和SPI设备驱动层,所述方法包括:
从所述SPI设备驱动层获取自定义的SPI设备组件描述文件和SPI驱动注册函数原型;
根据所述自定义的SPI设备组件描述文件和SPI驱动注册函数原型,形成SPI驱动的编译规则;
根据所述编译规则在所述内核层注册SPI驱动,并初始化所述SPI驱动,所述初始化所述SPI驱动的步骤包括:根据SPI驱动中断获取中断对应的中断服务操作,及在内核层设置发送缓存区和接收缓存区;
所述SPI设备驱动层通过所述SPI驱动中断与所述内核层的发送缓存区和接收缓存区进行数据交互;
所述内核层通过应用程序接口与所述应用层进行数据交互。
2.根据权利要求1所述的方法,其特征在于,所述初始化所述SPI驱动的步骤还包括:
配置SPI设备的外设属性,所述配置SPI设备的外设属性包括配置SPI主设备和SPI从设备。
3.根据权利要求2所述的方法,其特征在于,所述SPI主设备和所述SPI从设备之间通过SPI协议帧进行通信,每个所述SPI协议帧包括第一spi数据包字段、第二spi数据包字段和spi数据包长度字段。
4.根据权利要求3所述的方法,其特征在于,所述SPI协议帧的类型包括:心跳帧、命令帧、数据帧、链路正常帧和链路异常帧;
所述SPI主设备和所述SPI从设备之间通过SPI协议帧进行通信的过程包括:链路建立步骤、SPI主设备召唤数据的步骤和SPI主设备发送数据过程的步骤;
所述链路建立步骤包括:
所述SPI主设备发送所述心跳帧至所述SPI从设备;
所述SPI从设备接收到所述心跳帧后,判断链路是否正常,如果链路正常,则发送所述链路正常帧至所述SPI主设备;
所述SPI主设备接收到所述链路正常帧后,完成链路建立;
所述SPI主设备召唤数据的步骤包括:
所述SPI主设备发送命令帧至所述SPI从设备;
所述SPI从设备接收到所述命令帧后,判断链路是否正常,若链路正常且所述SPI从设备对应的内核层的发送缓存区有数据,则发送数据给所述SPI主设备,若链路异常,则发送链路异常帧至所述SPI主设备;
所述SPI主设备发送数据过程的步骤包括:
所述SPI主设备发送所述数据帧至所述SPI从设备;所述数据帧包括所述SPI主设备对应的内核层的发送缓存区中的数据;
所述SPI从设备接收所述数据帧,将所述SPI主设备对应的内核层的发送缓存区中的数据保存到所述SPI从设备对应的内核层接收缓存区。
5.根据权利要求1所述的方法,其特征在于,所述SPI设备驱动层通过所述SPI驱动中断与所述内核层的发送缓存区和接收缓存区进行数据交互的过程包括:
通过SPI设备的中断状态寄存器获取所述SPI设备产生的中断;
判断所述中断的类型;
若所述中断是SPI设备异常中断,则按照异常处理并打印异常日志;
若所述中断是SPI设备接收数据中断,则接收数据到内核层的接收缓存区;
若所述中断是SPI设备的发送数据中断,则发送数据到内核层的发送缓存区。
6.一种VxWorks操作系统下实现驱动SPI设备的系统,所述系统包括:
SPI设备驱动层,用于获取自定义的SPI设备组件描述文件和SPI驱动注册函数原型,根据所述自定义的SPI设备组件描述文件和SPI驱动注册函数原型,形成SPI驱动的编译规则,该SPI设备驱动层包括SPI设备和SPI驱动单元,所述SPI驱动单元用于根据SPI驱动中断获取中断对应的中断服务操作;
包括发送缓冲区和接收缓冲区的内核层,用于根据所述编译规则在所述内核层注册SPI驱动,所述内核层通过所述SPI驱动中断与所述SPI设备驱动层进行数据交互;
及应用层,所述应用层通过应用程序接口与所述内核层进行数据交互。
7.根据权利要求6所述的系统,其特征在于,所述SPI设备还包括中断状态寄存器,所述SPI驱动单元用于通过读取所述中断状态寄存器的状态获取所述SPI设备产生的中断,通过判断所述中断的类型,来当所述中断是SPI设备异常中断时,按照异常处理并打印异常日志;当所述中断是SPI设备接收数据中断时,接收数据到内核层的接收缓存区;当所述中断是SPI设备的发送数据中断时,发送数据到内核层的发送缓存区。
8.根据权利要求6所述的系统,其特征在于,所述SPI驱动单元还用于配置SPI设备的外设属性,所述配置SPI设备的外设属性包括配置SPI主设备和SPI从设备。
9.根据权利要求8所述的系统,其特征在于,所述SPI主设备和所述SPI从设备之间通过SPI协议帧进行通信,每个所述SPI协议帧包括包括第一spi数据包字段、第二spi数据包字段和spi数据包长度字段。
10.根据权利要求9所述的系统,其特征在于,所述SPI协议帧的类型包括:心跳帧、命令帧、数据帧、链路正常帧和链路异常帧;所述SPI主设备和所述SPI从设备之间通过SPI协议帧进行通信;
所述SPI主设备发送所述心跳帧至所述SPI从设备,所述SPI从设备接收到所述心跳帧后对链路是否正常进行判断,当链路正常时向所述SPI主设备发送所述链路正常帧,所述SPI主设备接收到所述链路正常帧后完成链路建立;
所述SPI主设备发送命令帧至所述SPI从设备,所述SPI从设备接收到所述命令帧后对链路是否正常进行判断,并在链路正常且所述SPI从设备对应的内核层的发送缓存区有数据时向所述SPI主设备发送数据,当链路异常时向所述SPI主设备发送链路异常帧;
所述SPI主设备发送所述数据帧至所述SPI从设备,所述数据帧包括所述SPI主设备对应的内核层的发送缓存区中的数据;所述SPI从设备接收所述数据帧,将所述SPI主设备对应的内核层的发送缓存区中的数据保存到所述SPI从设备对应的内核层接收缓存区。
CN201510312959.3A 2015-06-09 2015-06-09 VxWorks操作系统下实现驱动SPI设备的方法和系统 Active CN104965700B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510312959.3A CN104965700B (zh) 2015-06-09 2015-06-09 VxWorks操作系统下实现驱动SPI设备的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510312959.3A CN104965700B (zh) 2015-06-09 2015-06-09 VxWorks操作系统下实现驱动SPI设备的方法和系统

Publications (2)

Publication Number Publication Date
CN104965700A CN104965700A (zh) 2015-10-07
CN104965700B true CN104965700B (zh) 2018-07-03

Family

ID=54219734

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510312959.3A Active CN104965700B (zh) 2015-06-09 2015-06-09 VxWorks操作系统下实现驱动SPI设备的方法和系统

Country Status (1)

Country Link
CN (1) CN104965700B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105224479A (zh) * 2015-10-29 2016-01-06 上海斐讯数据通信技术有限公司 用于poe交换机的poe驱动系统
CN109086208B (zh) * 2018-08-06 2021-10-22 联想(北京)有限公司 一种数据处理方法及系统
CN111694503A (zh) * 2019-03-14 2020-09-22 成都易联智通信息技术有限公司 一种基于SPI Flash存储器的自定义文件系统
CN110557369A (zh) * 2019-07-25 2019-12-10 中国航天系统科学与工程研究院 基于国产操作系统内核态的高速数据处理平台
CN111427815A (zh) * 2020-03-05 2020-07-17 深圳震有科技股份有限公司 一种基于spi接口的核间通讯方法、终端及存储介质
CN111625487A (zh) * 2020-04-17 2020-09-04 惠州市德赛西威汽车电子股份有限公司 一种spi通信系统及其通信方法
CN112231265B (zh) * 2020-10-14 2022-09-13 天津津航计算技术研究所 一种嵌入式操作系统下串口设备高速率数据传输方法
CN112231266B (zh) * 2020-10-15 2023-03-24 天津津航计算技术研究所 一种基于查找表的arinc 429总线控制方法
CN112380033A (zh) * 2020-11-17 2021-02-19 北京百度网讯科技有限公司 车载安卓操作系统架构、车载操作系统调用方法、电子设备和存储介质
CN113391566A (zh) * 2021-06-23 2021-09-14 疯壳(深圳)科技有限公司 一种一体式可编程设备的协同工作方法及系统
CN113806265A (zh) * 2021-09-18 2021-12-17 国家石油天然气管网集团有限公司 一种spi主从式通讯方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103294509A (zh) * 2013-05-17 2013-09-11 深圳市亿威尔信息技术股份有限公司 用于VxWorks操作系统的驱动多串口设备的方法
CN103412841A (zh) * 2013-08-30 2013-11-27 哈尔滨工业大学 VxWorks 操作系统下CPCI总线RS422通信模块的驱动器及驱动方法
CN104102607A (zh) * 2014-07-17 2014-10-15 航天科工深圳(集团)有限公司 基于VxWorks操作系统环境下的CAN总线驱动方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI397822B (zh) * 2006-11-13 2013-06-01 Via Tech Inc 串列週邊介面控制裝置及串列週邊介面系統以及串列週邊介面裝置之判斷方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103294509A (zh) * 2013-05-17 2013-09-11 深圳市亿威尔信息技术股份有限公司 用于VxWorks操作系统的驱动多串口设备的方法
CN103412841A (zh) * 2013-08-30 2013-11-27 哈尔滨工业大学 VxWorks 操作系统下CPCI总线RS422通信模块的驱动器及驱动方法
CN104102607A (zh) * 2014-07-17 2014-10-15 航天科工深圳(集团)有限公司 基于VxWorks操作系统环境下的CAN总线驱动方法及系统

Also Published As

Publication number Publication date
CN104965700A (zh) 2015-10-07

Similar Documents

Publication Publication Date Title
CN104965700B (zh) VxWorks操作系统下实现驱动SPI设备的方法和系统
CN102523264B (zh) 面向虚拟机的usb设备远程共享方法和系统
CN103178996B (zh) 分布式包交换芯片模型验证系统及验证方法
US20070025259A1 (en) Communication protocol testing system
US20140343915A1 (en) Test environment configuration apparatus and method of operating network simulation apparatus using same
KR20100101677A (ko) 통합된 커넥터 아키텍처
CN107959582A (zh) 一种切片实例的管理方法及装置
CN104486234A (zh) 一种将业务交换机卸载到物理网卡的方法及服务器
CN109768970A (zh) 一种基于可配置的通用协议生成方法
TW201340663A (zh) 伺服器系統及其管理方法
CN101630343B (zh) 仿真方法及系统
CN116028292B (zh) 用于远程直接内存访问仿真验证的仿真验证系统及方法
CN106933753A (zh) 智能接口卡的控制方法及装置
US20130304952A1 (en) Methods and structure for configuring a serial attached scsi domain via a universal serial bus interface of a serial attached scsi expander
CN102316043A (zh) 端口虚拟化方法、交换机及通信系统
CN108228309A (zh) 基于虚拟机的数据包发送和接收方法及装置
CN102571474B (zh) 虚拟化的Radius测试系统及方法
CN100464535C (zh) 一种路由器虚拟驱动模块的动态加载与控制方法
WO2012079401A1 (zh) 一种虚拟串口系统及其通信方法
CN105786732A (zh) 数据访问方法及装置
CN103514074A (zh) Mvb网卡开发方法及平台
WO2015131553A1 (zh) 一种数据传输的方法和系统
CN105700823A (zh) 一种ip硬盘之间传输数据的方法和装置
CN106789449A (zh) 一种can总线开发与测试方法及系统
CN102811143A (zh) 数据链路层故障监测方法及装置、网络设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20200628

Address after: 518000 floor 8, building A5, Nanshan Zhiyuan, No. 1001, Xueyuan Avenue, Taoyuan Street, Nanshan District, Shenzhen City, Guangdong Province

Patentee after: Aerospace Ouhua Information Technology Co.,Ltd.

Address before: 5, building 4019, block B, Astronautics Hotel, 518000 Shennan Road, Guangdong, Shenzhen

Patentee before: AEROSPACE SCIENCE & INDUSTRY SHENZHEN (GROUP) Co.,Ltd.

TR01 Transfer of patent right