一种CAN总线控制器及控制方法与流程

文档序号:18095481发布日期:2019-07-06 11:01阅读:547来源:国知局
一种CAN总线控制器及控制方法与流程

本发明属于总线控制器的设计领域,尤其涉及一种can总线控制器及控制方法。



背景技术:

can(controllerareanetwork,控制局域网)是一种支持多主机的异步串行总线,它以其高性能、高可靠性、设计灵活以及价格低廉的特点,已经在汽车工业、工业控制等众多领域得到了广泛应用。目前国内使用的基本都是国外生产的can总线控制器芯片,自主研发控制器芯片对逐步摆脱国外产品以及促进我国工业发展有着重大意义。

近年来,fpga(fieldprogrammablegatearray,现场可编程门阵列)的技术也得到了较大的突破。fpga具有集成度高、含有大量的触发器和存储器等资源、能够重复编程、设计周期短以及灵活可变等优点,可采用硬件描述语言(如veriloghdl等)对其进行设计,具有较好的灵活性。



技术实现要素:

本发明的目的在于针对现有技术的不足,提供一种can总线控制器及控制方法。

本发明的目的是通过以下技术方案来实现的:一种can总线控制器,包括位时序模块、发送模块和接收模块;

所述位时序模块将位时间划分为多个时间片段,规定发送点、同步段、传播时间段、相位缓冲段和采样点。

所述发送模块包括组建数据帧单元、第一数据缓存单元、第一总线监听单元、位编码单元以及总线仲裁单元;

所述组建数据帧单元用于将需要发送的数据按照can总线标准组建相应的can数据帧,包括依次排列的帧起始、仲裁场、控制场、数据场、crc场、应答场以及帧结尾等部分;

所述第一数据缓存单元用于存储组建数据帧单元组建完毕的数据帧;

所述第一总线监听单元检测到总线空闲时,读取第一数据缓存单元中的数据帧准备进行发送,并在数据帧的仲裁场发送完毕前,对总线进行监听;

所述位编码单元用于将待发送的数据帧通进行位编码处理,然后按照位时序模块提供的发送点逐位发送;

所述总线仲裁单元在数据帧的仲裁场发送完毕前,进行冲突仲裁,若冲突仲裁失败,则停止发送,反之则继续发送数据帧直到数据帧发送完毕。

所述接收模块包括第二总线监听单元、数据读取单元、位解码单元、crc校验单元、仲裁场校验单元以及第二数据缓存单元;

所述第二总线监听单元检测到总线上有数据传输时,开启数据读取单元;

所述数据读取单元按照位时序模块提供的采样点逐位接收数据;

所述位解码单元对数据读取单元接收的数据进行位解码;

所述第二数据缓存单元存储位解码单元解码后的数据;

所述crc校验单元在接收完毕数据帧的crc场后进行crc校验,如果校验成功则开启仲裁场校验单元,反之则丢弃接收到的数据;

所述仲裁场校验单元校验仲裁场中的标识符是否与接收方相符,如果相符则将数据帧存入第二数据缓存单元等待使用,反之则丢弃该数据帧。

进一步地,所述第一数据缓存单元和第二数据缓存单元均包括若干数据帧寄存器。

进一步地,位时序模块分别与发送模块和接收模块相连并为其提供相关时序。

进一步地,发送模块与接收模块分别与can总线相连并分别向总线发送数据与从总线接收数据。

进一步地,该控制器的位时序模块、发送模块和接收模块均采用硬件描述语言veriloghdl并在fpga上实现。

一种can总线控制器的控制方法,该方法包括发送模块的发送流程和接收模块的接收流程;

所述发送模块的发送流程包括以下步骤:

(1)当有数据需要发送时,组建数据帧单元按照can总线标准组建相应的can数据帧,包括依次排列的帧起始、仲裁场、控制场、数据场、crc场、应答场以及帧结尾等部分;

(2)组建完毕的数据帧存入第一数据缓存单元中等待发送;第一数据缓存单元包括若干数据帧寄存器;

(3)当第一总线监听单元检测到总线空闲时,读取数据帧寄存器中的数据帧准备进行发送;

(4)将待发送的数据帧通过位编码单元进行位编码处理,然后按照位时序模块提供的发送点逐位发送;

(5)在数据帧的仲裁场发送完毕前,边发送边通过第一总线监听单元对总线进行监听,并通过总线仲裁单元进行冲突仲裁;

(6)若冲突仲裁失败,则停止发送,反之则继续发送数据帧直到数据帧发送完毕。

所述接收模块的接收流程包括以下步骤:

(1)当第二总线监听单元检测到总线上有数据传输时,开启数据读取单元;数据读取单元按照位时序模块提供的采样点逐位接收数据并通过位解码单元对其进行位解码,解码后存入第二数据缓存单元;

(2)数据读取单元接收完毕数据帧的crc场后,通过crc校验单元进行crc校验,如果校验成功则执行步骤(3),反之则丢弃接收到的数据;

(3)通过仲裁场校验单元校验仲裁场中的标识符是否与接收方相符,如果相符则将数据帧存入第二数据缓存单元等待使用,反之则丢弃该数据帧。

本发明的有益效果是:本发明提供的can总线控制器,通过发送模块、接收模块以及位时序模块的相互配合,能够满足can总线的基本功能。本发明的发送模块及接收模块包含高速的数据寄存器,使控制器能够在大规模数据流的情况下正常工作。

附图说明

图1是本发明整体设计框架图;

图2是本发明发送模块设计框架图;

图3是本发明接收模块设计框架图;

图4是本发明的一个实施例发送数据帧的仿真结果图;

图5是本发明的一个实施例接收数据帧的仿真结果图。

具体实施方式

下面结合附图和具体实施例详细描述本发明,本发明的目的和效果将变得更加明显。

如图1所示,本发明首先将can总线控制器划分为位时序模块、发送模块以及接收模块这三大模块,然后采用硬件描述语言veriloghdl逐一实现各模块的功能,最后将所提出的can总线控制器在fpga上实现。

本发明所述的位时序模块将位时间划分为多个时间片段,规定发送点、同步段、传播时间段、相位缓冲段和采样点。

本发明所述的发送模块包含组建数据帧单元、第一数据缓存单元、第一总线监听单元、位编码单元以及总线仲裁单元,主要工作流程如图2所示,包括以下步骤:

(1)当有数据需要发送时,组建数据帧单元按照can总线标准组建相应的can数据帧,包括依次排列的帧起始、仲裁场、控制场、数据场、crc场、应答场以及帧结尾等部分;

(2)组建完毕的数据帧存入第一数据缓存单元中等待发送;第一数据缓存单元包括若干数据帧寄存器;

(3)当第一总线监听单元检测到总线空闲时,读取数据帧寄存器中的数据帧准备进行发送;

(4)将待发送的数据帧通过位编码单元进行位编码处理,然后按照位时序模块提供的发送点逐位发送;

(5)在数据帧的仲裁场发送完毕前,边发送边通过第一总线监听单元对总线进行监听,并通过总线仲裁单元进行冲突仲裁;

(6)若冲突仲裁失败,则停止发送,反之则继续发送数据帧直到数据帧发送完毕。

本发明所述的接收模块包括第二总线监听单元、数据读取单元、位解码单元、crc校验单元、仲裁场校验单元以及第二数据缓存单元,主要工作流程如图3所示,包括以下步骤:

(1)当第二总线监听单元检测到总线上有数据传输时,开启数据读取单元;数据读取单元按照位时序模块提供的采样点逐位接收数据并通过位解码单元对其进行位解码,解码后存入第二数据缓存单元;

(2)数据读取单元接收完毕数据帧的crc场后,通过crc校验单元进行crc校验,如果校验成功则执行步骤(3),反之则丢弃接收到的数据;

(3)通过仲裁场校验单元校验仲裁场中的标识符是否与接收方相符,如果相符则将数据帧存入第二数据缓存单元等待使用,反之则丢弃该数据帧。

本发明所述的can总线控制器在位时序模块、发送模块以及接收模块的相互协作下能够实现can总线的通信。

实施例

图4为节点a、b同时发送数据帧仿真图。两个节点同时发送数据帧涉及到总线仲裁、暂停发送以及重新发送等步骤。具体如下:

1.节点a状态can_a_state与节点b状态can_b_state在总线空闲之前均置1,说明此时各节点均有未发送的数据帧等待发送。

2.检测到总线空闲,节点a发送状态sending_a与节点b发送状态sending_b同时置1,即同时开始发送数据帧。

3.节点b检测到节点b发送的数据can_node_b与can总线上的数据can_bus值不符,判定仲裁失败,仲裁失败标志arbitration_failed置1。同时sending_b置0,而节点a继续发送。

4.节点a的数据帧发送完毕,can_a_state与can_node_a同时置0。随后再次检测到总线空闲,节点b开始重新发送其数据帧。

5.节点b的数据帧发送完毕。且can_bus的值与发送数据一致,发送成功。符合实验预期。

通过上述实验仿真,在位时序模块的配合下,发送模块各功能正常,符合该设计预期效果。

图5为节点接收数据仿真图,具体如下:

1.接收节点在原本空闲的can总线上检测到下降沿,启动接收模块。首先将硬同步标志hard_syn_flag置1进行硬同步,同步完成后置0。随后接收数据帧标志rx_frame_flag置0,开始接收数据。

2.在位时序中采样点标志sample_point_flag到来时进行采样,每一个位时间进行8次采样决定最终采样值。

3.接收经过位编码的数据时,对其进行检测。检测到5个相同值时,位编码标志decoding_bit_flag置1,表示下一位为多余位不进行保存。下一个位时间过后,该值置0。同时,通过位编码计数器decoding_bit_cnt对忽略的位数进行计数。

4.当接收的解码后的数据位数达到17时,即已接收完控制场的数据长度及之前的场。此时对数据长度进行读取,通过数据长度判断该数据帧还未接收的位数以及何时接收完数据场。

5.已接收完数据场后,对已接收到的所有数据进行crc校验,计算新的crc序列。同时继续接收crc场。将新的crc序列check_crc与接收到的crc序列rx_crc进行对比,两者一致,继续接收数据。

6.crc校验正确后,在应答场的应答间隙由接收节点向总线发送一位显性位,由于显性位会覆盖隐性位,总线将体现为显性。发送节点检测到应答间隙总线为显性位,与自身发送的隐性位不对应,即确认数据帧发送成功。

7.数据帧完全接收完毕,数据帧接收完毕标志rx_frame_flag置1,停止对总线进行采样。

8.将接收到的数据帧的标识符与节点需要的标识符进行匹配,匹配成功对该帧进行保存。

通过仿真验证,接收模块能及时并准确地接收数据帧,符合设计预期效果。

上述实施例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1