发明内容
本申请实施例提供一种基于CAN总线控制器的数据传输系统及电子设备,用以解决现有的集成设备不同结构之间相互独立,存在通信隔离,影响通信效率的技术问题。
第一方面,本申请实施例提供一种基于CAN总线控制器的数据传输系统,所述数据传输系统包括CAN收发器、CAN总线和至少一个设置于所述CAN总线上挂载的CAN节点中的CAN总线控制器,所述CAN总线控制器包括接收管脚、发送管脚、寄存器模块和控制器模块,所述CAN收发器与所述CAN总线连接,所述CAN总线控制器的接收管脚和发送管脚与所述CAN收发器连接,其中:
所述CAN收发器用于解析所述CAN总线上的电压变化,得到逻辑电平信号;
所述寄存器模块用于根据所述逻辑电平信号生成寄存器配置信息;
所述控制器模块用于根据所述寄存器配置信息将所述CAN节点的模式切换到工作模式,并检测所述CAN总线上的数据传输信号,根据所述数据传输信号在所述CAN节点和所述CAN总线之间进行数据传输。
在一个实施例中, 所述CAN总线控制器还包括波特率模块、计时器模块、解码模块、过滤器模块和运行内存RAM模块,其中:
所述波特率模块用于确定所述CAN总线的位时序信息,根据所述位时序信息生成待接收帧数据的采样标志;
所述控制器模块还用于生成第一使能信号和第二使能信号;
所述计时器模块根据所述第一使能信号启动计时器,所述计时器用于根据位时间生成待接收帧数据的时间戳;
所述解码模块根据所述第二使能信号,基于所述时间戳和所述采样标志对所述待接收帧数据进行解码处理;
所述过滤器模块用于对解码处理后的待接收帧数据进行标识符匹配,若匹配通过,指示所述解码模块将解码后的待接收帧数据写入所述运行内存RAM模块中等待被读取,若匹配不通过,指示所述解码模块丢弃解码后的待接收帧数据。
在一个实施例中,所述CAN总线控制器还包括循环冗余校验模块,所述控制器模块中包括错误计数器和控制状态机,其中:
所述控制器模块还用于生成所述待接收帧数据的选择信号;
所述循环冗余校验模块根据所述选择信号生成所述待接收帧数据的循环冗余校验码,并根据所述循环冗余校验码对所述待接收帧数据进行校验;
所述控制器模块中的错误计数器根据所述循环冗余校验模块的校验结果,生成所述待接收帧数据对应的错误计数值;
所述控制器模块还用于当所述错误计数值达到设定阈值时,生成离线同步请求;
所述解码模块还用于根据所述离线同步请求进行离线同步。
在一个实施例中,所述CAN总线控制器还包括编码模块:
所述波特率模块还用于根据所述位时序信息生成待发送帧数据的传输标志;
所述循环冗余校验模块还用于生成待发送帧数据的循环冗余校验序列;
所述编码模块用于根据所述传输标志和所述循环冗余校验序列,对所述待发送帧数据进行编码处理。
在一个实施例中,所述计时器模块还用于记录所述待发送帧数据和所述待接收帧数据的帧起始时间戳,当所述待发送帧数据的帧起始时间戳与预设的定时发送时间戳匹配时,开始发送所述待发送帧数据。
在一个实施例中,所述运行内存RAM模块的存储容量为可配置。
在一个实施例中,所述寄存器模块包括控制寄存器和状态寄存器,其中:
所述控制寄存器用于配置所述控制器模块的控制信息,所述控制信息用于控制所述CAN总线上挂载的CAN节点的模式;
所述状态寄存器用于配置所述控制器模块中的控制状态机的状态信息,所述状态信息用于控制所述CAN节点的节点状态,所述节点状态包括接收状态和发送状态。
在一个实施例中,所述发送管脚包括内部发送管脚和外部发送管脚,所述接收管脚包括内部接收管脚和外部接收管脚:
所述CAN总线控制器还包括连接模块,用于提供所述内部发送管脚、所述外部发送管脚、所述内部接收管脚及所述外部接收管脚的连接关系。
在一个实施例中,当所述CAN节点处于工作模式时,在所述连接模块中,所述外部接收管脚与所述内部接收管脚连接,所述外部发送管脚与所述内部发送管脚连接;
当所述CAN节点处于测试模式时,在所述连接模块中,所述内部发送管脚与所述内部接收管脚连接,通过所述内部发送管脚发送的帧数据同步到所述内部接收管脚上,进行环回测试;
当所述CAN节点处于休眠模式时,通过所述外部发送管脚输出隐性位。
第二方面,本申请实施例提供一种电子设备,包括处理器和存储有计算机程序的存储器,还包括如第一方面所述的基于CAN总线控制器的数据传输系统中的CAN总线控制器。
本申请实施例提供的基于CAN总线控制器的数据传输系统及电子设备,通过在CAN总线上挂载的节点中设置CAN总线控制器,可以在CAN节点和CAN总线之间进行数据传输,使得CAN总线上各节点之间可以通过CAN总线进行通信,从而消除了节点之间的通信隔离,有利于对CAN总线上各节点进行集中控制,提高CAN总线上各节点之间的通信效率。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供的基于CAN总线控制器的数据传输系统(以下简称系统),包括CAN收发器、CAN总线和至少一个设置于CAN总线上挂载的CAN节点中的CAN总线控制器,CAN总线控制器设置于CAN总线上挂载的CAN节点中,该CAN节点可以是设备或子系统。CAN收发器与CAN总线连接,CAN总线控制器包括接收管脚CANRX和发送管脚CANTX,该接收管脚CANRX和发送管脚CANTX与CAN收发器连接。CAN总线控制器还包括寄存器模块和控制器模块,其中:
CAN收发器用于解析CAN总线上的电压变化,得到逻辑电平信号,寄存器模块用于根据CAN收发器解析出的逻辑电平信号生成寄存器的配置信息,控制器模块用于根据寄存器的配置信息切换CAN总线的模式,将CAN节点的模式切换为工作模式,同时检测数据传输信号,根据检测到的数据传输信号在CN节点和CAN总线之间进行数据传输,实现CAN节点与CAN总线之间的数据交换,基于此 ,不同的CAN节点之间可以基于CAN总线进行通信,从而消除集成设备中不同结构之间的通信隔离。其中,数据传输信号包括待接收帧数据或待发送帧数据的帧起始(Start-of-Frame ,SOF),当检测到帧起始时,控制节点开始发送或接收帧数据。寄存器模块包括多个寄存器,其中包括控制寄存器和状态寄存器,控制寄存器用于配置控制器模块的控制信息,该控制信息用于控制总线节点的模式,使总线节点处于工作、休眠或测试等模式下,状态寄存器用于配置控制器模块中的控制状态机的状态信息,该状态信息用于控制CAN总线节点的节点状态,节点状态包括接收状态和发送状态,用于控制帧数据的接收和发送。总线网络中各节点的处理器通过配置寄存器模块中的控制寄存器,使节点处于相应的模式下,当节点处于工作模式下时,控制器模块检测到SOF时,通过配置寄存器模块中的状态寄存器,使控制状态机跳到帧接收状态或帧传输状态,并产生使能信号,启动其他模块进行帧数据的接收或发送。
具体地,参照图1,图1为本申请实施例提供的基于CAN总线控制器的数据传输系统的系统结构示意图之一。在图1中,CAN总线(以下简称总线)包括高低电平的CAN_H和CAN_L两条线,CAN收发器为差分收发电路,分别与CAN_H和CAN_L连接,以解析总线上的电压变化,并通过CAN总线控制器的接收管脚CANRX将解析出的逻辑电平信号发送给CAN总线控制器,CAN总线控制器通过发送管脚CANTX将数据发送给CAN收发器,并通过总线进行传输。其中,总线上包括多个节点(节点1至节点N,N为大于0的正整数),该节点可以是搭载CAN总线控制器的子系统或设备,在此不做具体限定,在集成设备中,不同的节点可以表示不同的功能结构或设备。CAN总线控制器设置在节点内,对总线上的信息进行解析和传输,CAN收发器解析CAN总线上CAN_H和CAN_L的电压变化,在CANRX解析出逻辑电平信号,对应着显性位和隐性位,例如显性位是逻辑‘0’,隐性位是逻辑‘1’;根据CANTX输出的逻辑电平信号控制总线的CAN_H和CAN_L的电压变化,CAN总线控制器根据CANRX接收的电平信号按照CAN总线的协议要求接收并解析出帧数据,同时,也可以根据CAN协议要求通过CANTX发送帧数据。
进一步地,系统对数据的传输包括接收数据和发送数据,接收或发送的数据为帧数据。CAN总线控制器还包括波特率模块、计时器模块、解码模块、过滤器模块和运行内存RAM模块,在接收帧数据时,波特率模块用于确定总线的位时序信息,并将位时序信息写入寄存器模块中,根据位时序信息生成待接收帧数据的采样标志。控制器模块还用于生成使能信号,包括第一使能信号和第二使能信号,其中,计时器模块根据第一使能信号启动计时器,计时器用于根据位时间生成待接收帧数据的时间戳,解码模块根据第二使能信号启动解码功能,根据计时器生成的时间戳和波特率模块生成的采样标志,对待接收帧数据进行解码处理,过滤器模块用于对解码处理后的待接收帧数据进行标识符匹配,若匹配通过,则指示解码模块将解码处理后的待接收帧数据写入运行内存RAM模块,等待被节点中的处理器读取;若匹配不通过,则指示解码模块丢弃解码处理后的待接收帧数据。其中,过滤器模块中用于匹配的标识符可以是预先配置的,控制器模块通过生成使能信号控制其他模块的启动,从而完成数据的接收或发送。
进一步地,CAN总线控制器还包括循环冗余校验模块(即CRC(Cyclic RedundancyCheck)模块,以下简称CRC模块),控制器模块中包括错误计数器和控制状态机,控制器模块还用于生成待接收帧数据的选择信号,该选择信号用于对帧接收、帧发送、空闲或离线等不同节点状态进行选择,CRC模块根据控制器模块生成的选择信号,生成待接收帧数据的CRC校验码,并对待接收帧数据的CRC段进行校验,控制器中的错误计数器根据CRC模块对待接收帧数据的校验结果,生成对应的错误计数值,例如,校验结果为通过时,错误计数值减一,校验结果为不通过时,错误计数值增加一。控制器模块还用于当错误计数值达到设定阈值时,生成离线同步请求,解码模块根据控制器模块生成的离线同步请求,进行离线同步,在总线128次检测到11个连续的隐性位,认为离线同步成功。控制器模块的控制状态机在检测到SOF 时跳到帧接收状态,等待帧接收完毕之后会把标识符送进过滤器模块进行标识符的匹配,匹配的则将对应的帧数据写入到RAM内存中,处理器按照FIFO(first in,first out,先进先出)的原则读取该帧数据;如果不匹配, CAN总线控制器则丢弃该帧数据。
进一步地,CAN总线控制器还包括编码模块,当节点需要发送数据时,控制器模块通过使能信号启动编码模块、波特率模块和CRC模块,控制状态机切换至帧传输状态,波特率模块根据位时序信息生成待发送帧数据的传输标志,CRC模块生成待发送帧数据的CRC序列,编码模块根据传输标志和CRC序列,对待发送帧数据进行编码处理,编码处理后的帧数据在总线上通过仲裁传输,控制器模块等待帧发送完毕再次回到空闲。
更进一步地,CAN总线控制器的运行内存RAM模块的存储容量是可配置的,还支持定时发送功能,计时器模块还用于记录待发送帧数据和待接收帧数据的帧起始时间戳,即SOF时间戳,当待发送帧数据的SOF时间戳与预设的定时发送时间戳匹配时,开始发送待发送帧数据,实现定时发送功能。CAN总线控制器的接收管脚CANRX包括外部CANRX和内部CANRX,同样地,发送管脚CANTX包括外部CANTX和内部CANTX,外部CANTX和外部CANRX分别与CAN收发器连接。CAN总线控制器还包括连接模块,该连接模块提供外部CANTX、内部CANTX、外部CANRX及内部CANRX的连接关系。测试模式下,内部CANTX与内部CANRX连接,控制通过内部CANTX传输的数据直接共享到内部CANRX上,外部CANTX可以选择不输出,实现环回测试;工作模式下,外部CANTX与内部CANTX连接、外部CANRX与内部CANRX连接,通过外部CANTX发送帧数据,通过外部CANRX接收帧数据,实现数据传输;休眠模式下,默认外部CANTX输出隐性位,逻辑‘1’。
参照图2,图2为本申请实施例提供的CAN总线控制器的结构示意图之一,在图2中,CAN总线控制器接口包括总线接口、系统时钟clk、系统复位rst、与外部相连的外部CANRX和外部CANTX管脚,CAN总线控制器功能模块包括运行内存RAM模块1、过滤器模块2、波特率模块3、寄存器模块4、控制器模块5、解码模块6、计时器模块7、循环冗余校验模块8、编码模块9和连接模块10,其中,寄存器模块4包括控制寄存器和状态寄存器,CAN总线控制器通过总线接口与节点的通信总线连接,通过外部CANRX和CANTX与CAN收发器连接,并通过CAN收发器与外部CAN总线上的其他节点进行数据传输,实现基于CAN总线的通信。
进一步地,基于图2所示出的结构示意图,对本申请提供的CAN总线控制器的数据传输系统进行详细说明,首先,图2中CAN总线控制器各模块的功能如下:
运行内存RAM模块1:用于编码模块的数据读取、解码模块的数据写入以及总线的寄存器操作写入或读取RAM数据,运行内存RAM模块作为总线发送和接收信息的存储位置,其内存大小可以根据实际需要存储的数据的帧数进行配置。当多个模块在同一时间段内进行数据的读写操作时,需要进行优先级判断,根据优先级顺序,按照FIFO原则进行读写操作,例如,根据总线优先、编码次优先和解码最后的优先级顺序进行读取或写入操作。运行内存RAM模块1中除了优先级判断,还包括RAM控制器、接收FIFO写指针和接收FIFO读指针,其中,RAM控制器是相应的RAM存储器的控制器,对读取或写入RAM存储器的操作进行控制,接收FIFO读、写指针是保存帧接收的地址信息,帧接收信息按照FIFO的规则进行,可以根据接收FIFO读、写地址得到目前RAM中存储的数据帧数。
过滤器模块2:过滤器模块2在检测到解码模块6的帧接收完毕的信号时,把接收到的帧数据的帧标识符与过滤器内配置的标识符进行比较,若一致则比较成功,可以通过过滤器,相应的帧数据为有效信息,指示解码模块6将帧数据写入运行内存RAM模块1中,等待被处理器读取;若比较不成功则指示解码模块6丢弃接收到的帧数据。
波特率模块3:波特率模块3用于定义CAN协议的位时序信息,通过配置寄存器中的位时序寄存器修改波特率,同时该模块还具备CAN协议的硬同步和再同步。当波特率模块3被使能,其中的计数器会按照位时序寄存器中配置的信息进行工作并周期性的输出采样标志和传输标志,供解码模块6和编码模块9使用。如果节点状态是接收节点,那么在检测第一个位时间的边沿会初始化计数器,执行硬同步,在其他每一个边沿会初始化计数器,实现再同步。
寄存器模块4:寄存器模块提供与处理器的接口,处理器可以通过总线接口对寄存器以及运行内存RAM模块1的内存进行读取或写入操作,寄存器模块4内包括多个寄存器可以提供多种配置,主要包括CAN的控制寄存器、CAN的状态寄存器、接收FIFO的状态寄存器、中断寄存器、位时序寄存器、过滤器寄存器等。
控制器模块5:控制器模块5用于控制整个CAN总线控制器的运行过程,其中包括模式、控制状态机、错误检测和错误计数。处理器通过配置寄存器模块4的控制寄存器使CAN总线控制器处于不同的模式下,包括休眠、工作和测试模式,其中,休眠模式下,CAN总线控制器不工作,控制状态机处于等待状态,除了寄存器模块4和控制器模块5之外,其余模块不工作;工作模式下,其余模块正常运行,处理器配置寄存器模块4生成发送请求信号,控制器模块5检测信号部分检测到该发送请求信号,将控制状态机从等待状态切换到帧传输状态,在帧传输状态下,生成使能信号以启动编码模块9、循环冗余校验模块8、波特率模块3进行帧传输,等待帧传输完毕后,即检测到帧传输完毕的信号,控制状态机又切换回等待状态,等待检测下一个请求;如果检测到传输错误,则会再次传输对应的帧数据;测试模式下,允许对外界或内部进行检测,即可以在不影响外部总线信号的情况下,检测外部时序和内部自发时序,当检测到的错误计数值,即错误计数器的计数值达到设定值时,将CAN节点的错误状态由主动错误状态转换为被动错误状态和离线状态。离线状态表明该CAN节点错误的概率很高,需要等待离线同步后才能重新进入工作状态。此时生成离线同步请求,控制状态机进入离线同步状态,等待离线同步完毕,回到主动错误状态,其中,错误计数器的计数值在检测到传输错误和接收错误时增加,在检测到传输成功和接收成功时减少。
解码模块6:解码模块6根据控制器模块5的使能信号 ,启动解码,解码会根据CAN协议要求进行数据帧、远程帧、过载帧、错误帧和间隔帧的解码 ,在每个采样标志对应的采样点对内部CANRX信号进行电平读取,若解码成功则生成帧接收完毕的信号,否则,若解码出错输出接收错误信号。同时,解码模块6还用于总线同步和节点的离线同步,例如,在总线检测到11个连续的隐性位时,则视为总线同步完成,生成相应的总线同步完成的信号;在总线128次检测到11个连续的隐性位时,则视为离线同步完成,生成相应的离线同步完成的信号。
计时器模块7:计时器模块7由控制器模块5使能启动计数器进行计数,该计数器为位计数器,在每个位时间的采样点递增,产生16位的时间戳供外部使用。
循环冗余校验模块8:根据控制器模块5的选择信号,可以选择计算内部CANTX或者内部CANRX传输数据的CRC序列,在每一帧数据计算之前需要对CRC计算进行初始化,然后把CANTX或者CANRX的串行数据流输入计算,最终产生的计算结果为15位的CRC校验码序列,CRC序列可以用于进行CRC校验或者作为帧数据的一部分进行传输。具体地,对于节点接收的帧数据,计算出的CRC序列用于对接收的帧数据中的CRC段进行校验,对于节点发送的帧数据,计算得到的CRC序列作为待发送帧数据的CRC段,即作为待发送帧数据的一部分进行传输。
编码模块9:根据控制器模块5给出的使能信号启动,根据CAN协议要求,基于循环冗余校验模块8计算出的CRC序列和波特率模块3生成的传输标志,可以编码输出数据帧、远程帧、错误帧、过载帧和间隔帧,当编码出现错误时会产生传输错误信号,当编码成功时输出传输完毕的信号,传输错误信号和传输完毕信号用于供控制器模块5的错误计数器生成计数值。
连接模块10:用于提供外部CANTX 、外部CANRX 、内部CANTX及内部CANRX的连接关系。在测试模式下,可以控制内部CANTX的数据流共享到内部CANRX上,外部CANTX可以选择不输出,可以实现环回测试,并且不会对外部总线产生影响;正常工作模式下,外部CANTX与内部CANTX相连,外部CANRX与内部CANRX相连,对数据进行接收和发送,实现节点间的通信;休眠模式下,默认外部CANTX输出隐性位,逻辑‘1’,不与其他节点通信。
基于上述CAN总线控制器各模块的功能,本申请实施例提供的基于CAN总线控制器的数据传输系统在进行数据传输时,具体地,处理器可以通过配置寄存器模块4的控制寄存器使CAN节点处于不同的模式下,休眠模式下CAN节点不工作,控制状态机处于等待状态,除了寄存器模块4和控制器模块5之外,其余模块不工作。工作模式下,其余模块正常运行,处理器配置寄存器产生发送请求信号,控制器模块5中的检测信号部分将检测到该发送请求信号,将控制状态机从等待状态切换到帧传输状态,在帧传输状态下,启动编码模块9、循环冗余校验模块8、波特率模块3进行帧传输,等待检测到帧传输完毕信号后,又回到等待状态,等待检测下一个请求;如果检测到传输错误,则会再次传输该帧数据。测试模式下,允许对外界或内部进行检测,即可以在不影响外部总线信号的情况下,检测外部时序和内部自发时序测试,当检测到错误时,控制器模块5中的错误计数器的计数值改变,当错误计数器的计数值达到设定的阈值时,CAN节点的错误状态由主动错误状态转变为被动错误状态和离线状态,需要完成离线同步后才能重新进入工作状态,此时,控制器模块5生成离线同步请求,控制状态机切换至离线同步状态,等待解码模块6离线同步完毕,控制器模块5控制CAN节点回到主动错误状态,可以重新进入工作模式进行数据传输。
在本实施例中,通过在CAN总线上挂载的节点中设置CAN总线控制器,可以在CAN节点和CAN总线之间进行数据传输,包括数据的发送和接收,使得CAN总线上各节点之间可以通过CAN总线进行通信,从而消除了节点之间的通信隔离,有利于对CAN总线上各节点进行集中控制,提高CAN总线上各节点之间的通信效率。
进一步地,CAN总线控制器可以提供多种模式和可配置的存储容量,有利于满足用户的个性化需求,并且可以实现定时发送,提供更多的应用场景。
图3示例了一种电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器(processor)310、通信接口(Communication Interface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信,通信接口320与CAN总线控制器连接,并通过CAN总线控制器与外部进行通信。处理器310可以调用存储器330中的计算机程序或数据,以实现基于CAN总线控制器的数据传输系统的功能。
此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述系统的全部或部分功能。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
所述存储介质可以是处理器能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(MO)等)、光学存储器(例如CD、DVD、BD、HVD等)、以及半导体存储器(例如ROM、EPROM、EEPROM、非易失性存储器(NAND FLASH)、固态硬盘(SSD))等。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)实现各个实施例或者实施例的某些部分所述的系统功能。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。