CN104965700A - VxWorks操作***下实现驱动SPI设备的方法和*** - Google Patents
VxWorks操作***下实现驱动SPI设备的方法和*** Download PDFInfo
- Publication number
- CN104965700A CN104965700A CN201510312959.3A CN201510312959A CN104965700A CN 104965700 A CN104965700 A CN 104965700A CN 201510312959 A CN201510312959 A CN 201510312959A CN 104965700 A CN104965700 A CN 104965700A
- Authority
- CN
- China
- Prior art keywords
- spi
- equipment
- frame
- link
- data
- 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
- 238000000034 method Methods 0.000 title claims abstract description 43
- 230000003993 interaction Effects 0.000 claims abstract description 20
- 230000005540 biological transmission Effects 0.000 claims description 45
- 230000002159 abnormal effect Effects 0.000 claims description 27
- 230000002093 peripheral effect Effects 0.000 claims description 16
- 230000008569 process Effects 0.000 claims description 15
- 238000012545 processing Methods 0.000 claims description 9
- 230000005856 abnormality Effects 0.000 claims description 6
- 238000004891 communication Methods 0.000 abstract description 8
- 230000008878 coupling Effects 0.000 abstract description 5
- 238000010168 coupling process Methods 0.000 abstract description 5
- 238000005859 coupling reaction Methods 0.000 abstract description 5
- 230000006870 function Effects 0.000 description 37
- 238000011161 development Methods 0.000 description 13
- 238000005516 engineering process Methods 0.000 description 2
- 244000118350 Andrographis paniculata Species 0.000 description 1
- 235000015429 Mirabilis expansa Nutrition 0.000 description 1
- 244000294411 Mirabilis expansa Species 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000009432 framing Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 235000013536 miso Nutrition 0.000 description 1
- 238000005316 response function Methods 0.000 description 1
- 238000002834 transmittance Methods 0.000 description 1
Landscapes
- Communication Control (AREA)
Abstract
本发明涉及VxWorks操作***下实现驱动SPI设备的方法和***。VxWorks操作***包括应用层、内核层和SPI设备驱动层,其方法包括:从SPI设备驱动层获取自定义的SPI设备组件描述文件和SPI驱动注册函数原型;根据自定义的SPI设备组件描述文件和SPI驱动注册函数原型,形成SPI驱动的编译规则;根据编译规则在内核层注册SPI驱动,并初始化SPI驱动,初始化SPI驱动的步骤包括设置SPI驱动中断及其对应的操作,及在内核层设置发送缓存区和接收缓存区;SPI设备驱动层通过SPI驱动中断与内核层的发送缓存区和接收缓存区进行数据交互;内核层通过应用程序接口与应用层进行数据交互。上述的VxWorks操作***下实现驱动SPI设备的方法和***,能够降低代码的耦合程度,提高SPI通信的稳定性和可靠性。
Description
技术领域
本发明涉及配电自动化技术领域,特别是涉及一种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 Programming Interface,应用程序接口)为用户提供了一套标准接口函数,用户可以无视底层设备类型,对所有的设备都使用这一套接口函数进行操作,由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从设备对应的内核层接收缓存区。
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 true CN104965700A (zh) | 2015-10-07 |
CN104965700B CN104965700B (zh) | 2018-07-03 |
Family
ID=54219734
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510312959.3A Expired - Fee Related CN104965700B (zh) | 2015-06-09 | 2015-06-09 | VxWorks操作***下实现驱动SPI设备的方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104965700B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224479A (zh) * | 2015-10-29 | 2016-01-06 | 上海斐讯数据通信技术有限公司 | 用于poe交换机的poe驱动*** |
CN109086208A (zh) * | 2018-08-06 | 2018-12-25 | 联想(北京)有限公司 | 一种数据处理方法及*** |
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通信***及其通信方法 |
CN111694503A (zh) * | 2019-03-14 | 2020-09-22 | 成都易联智通信息技术有限公司 | 一种基于SPI Flash存储器的自定义文件*** |
CN112231266A (zh) * | 2020-10-15 | 2021-01-15 | 天津津航计算技术研究所 | 一种基于查找表的arinc 429总线控制方法 |
CN112231265A (zh) * | 2020-10-14 | 2021-01-15 | 天津津航计算技术研究所 | 一种嵌入式操作***下串口设备高速率数据传输方法 |
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主从式通讯方法 |
CN113806265B (zh) * | 2021-09-18 | 2024-07-26 | 国家石油天然气管网集团有限公司 | 一种spi主从式通讯方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080114901A1 (en) * | 2006-11-13 | 2008-05-15 | Via Technologies, Inc. | Serial peripheral interface (spi) control device, spi system and method of determining a spi device |
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总线驱动方法及*** |
-
2015
- 2015-06-09 CN CN201510312959.3A patent/CN104965700B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080114901A1 (en) * | 2006-11-13 | 2008-05-15 | Via Technologies, Inc. | Serial peripheral interface (spi) control device, spi system and method of determining a spi device |
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总线驱动方法及*** |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224479A (zh) * | 2015-10-29 | 2016-01-06 | 上海斐讯数据通信技术有限公司 | 用于poe交换机的poe驱动*** |
CN109086208A (zh) * | 2018-08-06 | 2018-12-25 | 联想(北京)有限公司 | 一种数据处理方法及*** |
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通信***及其通信方法 |
CN111625487B (zh) * | 2020-04-17 | 2024-05-31 | 惠州市德赛西威汽车电子股份有限公司 | 一种spi通信***及其通信方法 |
CN112231265B (zh) * | 2020-10-14 | 2022-09-13 | 天津津航计算技术研究所 | 一种嵌入式操作***下串口设备高速率数据传输方法 |
CN112231265A (zh) * | 2020-10-14 | 2021-01-15 | 天津津航计算技术研究所 | 一种嵌入式操作***下串口设备高速率数据传输方法 |
CN112231266A (zh) * | 2020-10-15 | 2021-01-15 | 天津津航计算技术研究所 | 一种基于查找表的arinc 429总线控制方法 |
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主从式通讯方法 |
CN113806265B (zh) * | 2021-09-18 | 2024-07-26 | 国家石油天然气管网集团有限公司 | 一种spi主从式通讯方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104965700B (zh) | 2018-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104965700A (zh) | VxWorks操作***下实现驱动SPI设备的方法和*** | |
KR102358477B1 (ko) | 인터페이스 제어 메커니즘을 갖는 전자 시스템 및 그것의 동작 방법 | |
US20070005867A1 (en) | Virtual peripheral device interface and protocol for use in peripheral device redirection communication | |
CN105721357A (zh) | 交换设备、***部件互连高速***及其初始化方法 | |
CN101827072A (zh) | 虚拟内存协议分段卸载 | |
US20140019574A1 (en) | Remote Direct Memory Access Socket Aggregation | |
CN106371847B (zh) | Windows xp***下CPCI总线RS422通信驱动方法及*** | |
US8756355B2 (en) | Methods and structure for configuring a Serial Attached SCSI domain via a Universal Serial Bus interface of a Serial Attached SCSI expander | |
WO2017032112A1 (zh) | 一种与无中央处理器单板通讯的方法及通讯设备 | |
CN110837488B (zh) | 报文传输方法和装置 | |
CN103235755A (zh) | 一种bios远程网络调试方法 | |
CN103558812B (zh) | 基于fpga和arm的mvb网络四类设备网卡 | |
CN106878164A (zh) | 一种报文传输方法和装置 | |
CN105162673A (zh) | 数据传输接口及方法 | |
CN102750249B (zh) | 上位机与下位机通信的方法、装置及*** | |
CN105243044A (zh) | 基于串口的管理***及管理方法 | |
CN104965808A (zh) | 用于实现串口复用的装置以及串口复用的方法 | |
CN108647131B (zh) | 运行日志的输出*** | |
KR101559089B1 (ko) | 장치의 컴포넌트들 간에 메모리 자원들을 공유하기 위한 통신 프로토콜 | |
CN101909013B (zh) | 一种可动态配置的信息交换装置 | |
CN101763324B (zh) | 设备模拟的实现方法和装置 | |
JPWO2015190079A1 (ja) | 計算機システム、遠隔デバイスの接続管理方法及びプログラム | |
CN102998994B (zh) | 嵌入式血液分析仪控制***及其控制方法 | |
CN105429836A (zh) | 一种实时以太网EtherCAT主站*** | |
CN114095303B (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180703 |
|
CF01 | Termination of patent right due to non-payment of annual fee |