Jeff 发表于 2024-11-26 18:02:12

打卡学习 |已送

如题。

每天记录学习进度。

Jeff 发表于 2024-11-27 16:47:48

学习记录:
车规32位80C51中CAN2.0总线第三课时学习。
1、CAN2.0A,B总线定义
2、通讯协议讲解:消息传输四种不同帧类,数据帧、远程帧、错误帧、过载帧。
3、通讯协议格式分为标准格式与扩展格式,CAN2.0A采用标准格式,CAN2.0B采用扩展格式。
4、数据帧构成:起始字段、仲裁字段控制字段、数据字段、CRC字段、ACK字段(应答校验)、帧结束。
   标准帧格式内容为:SOF、11位标识符、RTR、IDE、(r0,DLC)。
   扩展帧格式内容为:SOF、11位标识符、SRR、IDE、18位标识符、RTR、r1、r0、DLC.
   
5、标准格式仲裁字段:自定义标识符长度11位,按照从ID10-ID0顺序发送,其中ID0为最低有效位。LSB(俗称小端)最高的七个有效位ID10到IDE4,不能全隐性。MSB(俗称大端)
6、在标准格式仲裁字段,数据帧RTR必须显性,在远程帧,RTR必须隐性。

7、扩展格式有两个子段构成。
   11位基本ID:从ID28到ID18顺序发送,ID定义了扩展帧的基本优先级。
   扩展ID有18位构成,从ID17-ID0顺序发送。

8、SRR是一个隐性位,在标准格式RTR位置,因此扩展替代标准中的紧跟的RTR位置。
9、数据帧控制字段:对于标准格式,控制字段6位组成,保留位必须显性(0)发送,为了区分标准格式与扩展格式,以前CAN1.0~1.2中保留位r1现在表示为IDE位。
10、数据字段的数据长度编码为4位宽,允许数据字节范围0-8,不能使用其他值,不能超过0-8范围,可以传输为0,特殊传输字dddd(0000)
11、CRC字段包含CRC序列,后面跟着CRC界定符。帧校验序列源自循环冗余码,最适合小于127帧,生成多项式,系数以2取模,就是余数发送到总线上的CRC序列。
12、ACK字段为两位长度,包含ACK时隙和ACK界定符。ACK字段校验,发送站发送两个隐性位,接收器正确收到,在ACK时隙发送一个显性位回发--结束本次通讯传输握手回传。
       ACK界定符必须隐性。
13、每个数据帧结束必须有一个标志序列分割,有7个隐性位组成。

远程帧:
14、远程帧:分为标准格式与扩展格式存在。
       6个字段,因为远程帧只是发送请求信号,没有数据信息(数据帧有7个字段),帧开始、仲裁、控制、CRC、ACK、帧结束。
       与数据帧比较,远程帧RTR是隐性(1),没有数据字段,独立于数据长度编码的值,该值范围0~8

      
错误帧

15、错误帧分为两个字段,第一个字段错误标志,第二个字段错误界定符。为正确终止错误帧,错误被动节点需要总线空闲至少三个位时间(如果错误被动接收器存在本地错误),因此总线不应被加载到100%。主动错误标志由连续六个显性构成(000000),被动错误标志有连续6个隐性构成(111111)
16、检测到错误的站通过发送主动错误标志来指示错误,其他从站收到也会开发发送错误标志,因此总线监视的显性序列将各个从站错误低价,总长度在,6-12位之间变化。
17、从站检测到主站发送的错误条件为错误被动站,尝试发送被动错误表识回应指示错误。错误被动站6个具有相同极性的连续为,被动错误标志的开始处开始,当检测到6哥相同的位时完成被动错误标志。

过载帧

18、包含过载标志和过载定界符两个字段。
19、两种过载条件:1、正在等待接收数据,需要延迟下一个接收。2、间歇第一或第二位检测到显性,在错误界定符或者过载界定符第八位采样一个显性位,他将开始传输一个过载帧而不是错错误帧(错误计数器不会递增记录),通讯握手最多可以产生两个过载帧
20、过载标志有6个00000显性表示。在间隙第三位检测到显性,理解为开始。

21、帧间隙空间包含位字段间歇和总线空闲。对于错误被动站,他们是回发消息第一个,暂停传输。 错误被动站中间有个暂停发送标志。

22、总线空闲时序理解,不限时长,检测到隐性位理解为帧开始SOF(CallBack!)


消息过滤

23、可选的屏蔽寄存器允许将任何11位标识符,可以全部或者部分对照屏蔽。

消息验证
24、发送器没有收到错误信息视为有效,有错根据优先级自动重新传输,总线空闲第一时间开始发送。
25、接收器在收到传输最后一位之间没错视为有效。帧结束最后一位忽视,一个显性值不会导致格式错误。

位流编码:

26、帧的起始、仲裁字段、控制字段,数据字段和CRC序列才有比特填充方法进行编码。
27、每当发送器在要发送的比特流中检测到5个具有相同的值的连续比特时,他会自动在实际发送的比特流中茶语一个互补的比特。
28、数据帧或远程帧的剩余位字段(CRC定界符,ACK字段和帧结束)是固定格式,没有位填充。
29、错误帧和过载帧也是固定格式,没有填充方法。
30、根据非归零方法NRZ,对消息的位流进行编码。


第一课时与第二课时算是概论背景讲解,了解一下就好。

Jeff 发表于 2024-11-30 18:09:45

车规32位80C51中CAN2.0总线第四课时学习--何宾教授课程
错误管理-错误检测

1、五中不同的错误类型
      位错误:总线上发送位的单元也监视总线,当监视到比特位的值与发送位的值不同时(发送单元自检),必须在该位时间检测位错误。
      例外:在仲裁字段的填充位流起见或在确认时隙起见发送隐性位,当监视到一个显性位时,不会发生位错误。
               发送一个被动错误标志并且检测到显性位的发送器并不会将此解释为位错误。

2、填充错误:出现6个连续相同极性的位电平(错误帧除外)
3、CRC错误:CRC序列由发送器的CRC计算己过组成,接收器以与发送器相同的方式计算CRC。
4、格式错误:当固定格式的位字段包含一个或多个非法位时,则检测到格式错误。

备注:对于接收器最后一位显性忽视,不看做格式错误。
5、响应错误:当在ACK时隙期间没有监视到显性位,发送器检测到一个错误响应。

错误管理--错误指示
6、主动被动错误责任归类与划分。检测到错误在相应站的下一位开始传输错误标志;当检测到CRC错误时,都会从ACK界定符滞后的位开始传输错误标志,除非已经启动了另一个条件的错误标志。

错误界定:
7、错误主动:一个错误主动的单元可以正常参与总线通信并且当检测到错误时发送一个主动错误标识。
8、错误被动:一个错误被动的单元不得发送主动错误标识,但是当检测到错误时,智能发送一个被动错误标志,并且在发送后,被动单元将在初始化下一个发送之间处于等待状态(暂停发送)
9、总线关闭:一个总线关闭单元不允许对总线有影响。

故障界定
10、在每个总线单元实现两种计数器,发送错误计数,接收错误计数。
11、错误指示规则:注:在给定的消息传输期间,可能用到不止一个规则。
       当接收器检测到一个错误,接收计数错误将递增1. 下面情况例外,即在发送主动错误标志或过载标志期间检测到的错误。
       当发送一个错误标志的后,接收器检测到第一个位为“显性”时,“接收错误计数”将递增8.
       当发送器发送一个错误标志标志时,“发送错误计数器”增加8.、
            例外情况1:日字旁发送器是错误被动,并且由于没有检测到一个显性确认而检测到一个响应错误,并且在发送其被动错误标志时没有检测到一个显性位,在例外情况1中,发送错误计数不变。
             例外情况2:如果发送器发送一个错误标志,因为在仲裁期间发生了填充错误,并且应该是隐性的,并且已经作为隐性发送但监控为显性,在例外情况2中,发送错误计数器不变。
       发送器正在发送一个错误标志或一个过载标志,此时如果检测到位错误时,发送错误计数器增加8.
       接收器正在发送一个主动错误标志或一个过载标志,此时如果检测到位错误,接收错误计数增加8.
       任何节点在发送一个主动错误标志,被动错误标志或过载标志后,容忍最多7个连续的显性位。
          在检测到第14个连续的显性位之后(在主动错误表识或过载标志的情况下)或在一个被动错误标志后检测到第八个连续的显性位后,以及在每个额外的8个连续显性位序列之后,每个发送器将其发送的错误计数加8,每个接收器将其错误计数增加8.
       在成功传输消息后(得到ACK且没有错误,直到完成帧结束)。错送错误计数器递减1,除非他已经是0.
       当成功接收消息(接收没有错误,一直到ACK时隙,且成功发送ACK位)接收错误计数递减1(如果他在1-127范围内)
         如果接收错误计数器已经是0,保持不变,如果大于127,则将他设置为119-127范围(最后8个)内的一个随机值。
       当发送错误计数等于或超过128时,或者接收错误计数等于或超过128时,一个节点是错误被动,让节点变为错误被动的错误条件会导致节点发送主动错误标志。
       当发送错误计数>256时,节点为总线关闭。
      当发送错误计数和接收计数都小于或扥股127时,错误被动将重新变为错误主动。
       在总线上检测到11个连续的隐性位出现128次后,允许总线关闭的节点变为错误激活(不再妃总线关闭),其错误计数器均设置为0,计数回归。
             注:1、>约96的错误计数值表明总线受到严重干扰。提供测试这种情况的方法可能是有利的。
                     2、启动/唤醒。如果在启动期间只有一个节点在线,且如果节点发送一些消息,则他将得到非相应。检测一个错误并且重复错误。由于这个原因,他将变成“错误被动”而不是“总线关闭。”

位时序要求--标称位速率
12、标称比特率妃在没有理想发送器重新同步的情况下每秒传输的比特数。
      标称位时间=1/标称位速率。可以将标称位时间划分为单独的菲重叠时间段,SYNC_SEG\PROP_SEG\PHASE_SEG1\PHASE_SEG2.其中PHASE_SEG1后面为采样点。
      同步段SYNC_SEG:这部分位时间用于同步总线上各个节点。在该段内期望有一个边沿。
       传播时间段PROP_SEG:这部分位时间用于补偿网络内的物理延迟时间。它是信号在总线上传播时间、输入比较器延迟孼输出比较器延迟之和的两倍。
       相位缓冲段1:PHASE_SEG1和PHASE_SEG2用于补偿边沿的相位误差。这些段可以通过重新同步来延迟或缩短。
   
      采样点妃读取总线电平并将其解释为相应位的值的时间点。
       他的位置在PHASE_SEG1尾:此外,信息处理时间是从采样点开始的时间段,为计算后续比特级而保留。

13、时间份/时间量子(TIME QUANTUM)是从振荡器周期导出的固定时间单位。
       有一个可编程的预分频器,整数值,范围是1-32.
       从最小时间份开始,时间份可以是最小时间的M倍。其中的M为预分配器的值。

14、时间段和时间分的关系。
       SYNC_SEG是一个时间份长度。
       PROP_SEG是1-8个时间份长度
       PHASE_SEG是1-8个时间份长度()遗漏一个?
       PHASE_SEG是PHASE_SEG1和信息处理时间的最大值。
       信息处理时间小于等于两个时间份长度。

15、通常情况下,控制单元不为本地CPU及通信设备使用不同振荡器。
      因此,CAN设备的振荡器频率往往是本地CPU的频率,并且由控制单元的要求决定。:为了获得所需的比特率,位时间的可编程性是必要的。
      在设计中,在没有本地CPU而使用的CAN实现的情况下,无法对位时间进行编程。:另一方面,这些设备允许选择外部振荡器,以便将设备调整到适当的比特率,此时可编程性显得并不重要。

16、采样点的位置应该为所有节点共同选择。
      因此,串行链路输入/输出设备的位时序必须与以下位时间定义兼容。
       一个位时间10个时间份:同步段1个时间份,传播时间段1个时间份,PHASE_SEG1:4个时间份,PHASE_SEG2:4个时间份。

17、硬同步。
       硬同步后,内部位时间通过SYNC_SEG重新启动。
       因此:硬同步迫使导致硬同步边沿位于重新启动位时间的同步段内。

18、重新同步跳转宽度。
      重新同步的结果是,PHASE_SEG1可能变长或者PHASE_SEG2可能缩短.:相位缓冲段变长或缩短的数量有一个上限,该上限由重新同步跳转宽度按给定。
      通过编程,将重新同步跳转宽度设置在1-min(4,PHASE_SEG1)的范围。
      时钟信息可以从一位跳变到另一个位值中得到。
      只有固定最大数量的连续位具有相同值的特性提供了在帧期间将总线单元重新同步到位流的可能性。
      用于重新同步的两个跳变之间的最大长度为29位时间。

19、一个边沿的相位误差。
      一个边沿的相位误差有相对于SYNC_SEG的边沿位置给出,以时间份测量。
      相位误差的符号定义如下:
      e=0,如果边沿在SYNC_SEG内。
      e>0,如果边沿在采样点之前。
      e<0,如果边沿处于前一个位的采样点之后。
   CAN控制器在同步后确定重新采样时间份。

20、重新同步。
       当引起重新同步边沿的相位误差的幅度小于或等于重新同步跳转宽度的设定值时,重新同步和硬同步效果相同。
       当相位误差的幅度大于通信同步跳转宽度是。
         1、如果相位误差为正,则将PHASE_SEG1延长到等于重新同步跳转长度。
         2、如果相位误差为负,则将PHASE_SEG2缩短到等于重新同步跳转长度。

21、重新同步规则:
       硬同步孼重新同步的两种形式。他们遵守以下规则。
            在一个位时间内只允许一个同步。
            仅当采样点之间探测到的值与紧跟沿之后的总线值不同的时候,边沿才用于同步。
            在总线空闲期间,只要有一个隐性位到显性位的跳变,就会执行硬件同步。
            满足上面规则1孼规则2的所有其他隐性到显性边沿将用于重新同步,但是传输显性位的节点奖不会执行重新同步;因为隐性到显性的边沿与如果实行隐性到显性就执行重新同步,则为正的相位误差误差。(同步规则排除)

22、CAN模块功能:
      STC32G系列单片机内部集成两组独立的CAN总线功能单元,支持CAN2.0协议。
23、模块内部框架:CPU-总线接口单元--发送缓冲区-位流处理器-位时序逻辑--总线收发器--接收过滤器-接收缓冲区    :并行数据转串行数据送到收发器。串行转并行数据。

24、CAN模块的主要功能:
      标准帧与扩展帧信息的接收与传送。
      64字节的接收FIFO。
      在标准和扩展格式中都有单/双接收过滤器。
      发送、接收的错误计数器。
       总线错误分析。
   
25、CAN功能脚切换、
      在STC32G系列单片机中集成俪两路CAN接收控制器。
         第一路引脚的位置通过P_SW1寄存器设置。
         符号      地址               B7      B6      B5          B4            B3      B2            B1         B0
          P_SW1    A2H               S1_S         CAN_S         SPI_S         LIN_S
   
         P_SW1寄存器第四和第五位用于选择第一路CAN接口所使用的STC32G系列单片机的引脚位置,其具体含义
                CAN_S               CAN_RX                  CAN_TX
                  00                           P0.0                     P0.1
                  01                           P5.0                     P5.1
                  10                           P4.2                     P4.5
                  11                           P7.0                     P7.1               
          分为两类1、CAN工作控制。 2、CAN规范

          可通过多路选择器选择引脚 B4B5位定义前面代码来确定后面引脚的使用

26、第二路引脚的位置通过P_SW3寄存器设置
         符号      地址               B7      B6      B5          B4            B3      B2               B1         B0
          P_SW3    BBH               I2S_S             S2SPI_S         S1SPI_S         CAN2_S

      P_SW3寄存器第0位和第一位用于选择第二路CAN接口所使用的STC32系列单片机的引脚位置
             CAN2_S               CAN2_RX                  CAN2_TX
                  00                           P0.2                     P0.3
                  01                           P5.2                     P5.3
                  10                           P4.6                     P4.7
                  11                           P7.2                     P7.3   

本课时笔记完结。

Jeff 发表于 2024-12-4 17:32:04

车规32位80C51中CAN2.0总线第五课时课时学习--何宾教授课程

辅助寄存器2
CAN总线中断控制寄存器
CAN总线地址寄存器
CAN总线数据寄存器

辅助寄存器
1、该寄存器位于SFR区域地址为97H位置,复位后,该寄存器的值为“XXXX,0000”

   寄存器名称   地址      B7      B6    B5      B4               B3                  B2                  B1                   B0
       AUXR2          97H         -      -      -         -            CANSEL             CAN2EN          CANEN               LINEN

2、 CANEN:CAN总线使能控制位
      当该位为0时,关闭第一路CAN总之器;该位为1时,使能第一路CAN控制器。

3、CAN2EN:CAN2总线使能控制位。
      当该位为0时,关闭第二路CAN总线控制器(CAN2);该位为1时,使能第二路CAN控制器(CAN2)

4、CANSEL:CAN总线选择
      该位为0时,选择第1路CAN控制器;为1时,选择第二路CAN(CAN2)控制器。


CAN总线中断控制寄存器(CANICR)

5、该寄存器位于SFR区域地址为F1H的位置。复位后,该寄存器的值为“0000.0000”

   寄存器名称   地址      B7             B6               B5             B4               B3                  B2            B1                   B0
       CANICR         F1H   PCAN2H   CAN2IF      CAN2IE    PCAN2L         PANH            CANIF          CANIE               PCANL

6、CANIE:CAN总线中断使能控制位
      该位为0,关闭CAN中断。该位为1,使能CAN中断。

7、CANIF:CAN总线中断请求标志位。
      需要软清零。

8、PCANH和PCANL:CAN中断优先级控制位。
      PCANH               PCANL                优先级
      0                        0                        0最低
         0                     1                        1
      1                        0                        2
         1                     1                        3最高


第二路CAN总线

9、CAN2IE:CAN2总线中断使能控制位。
      该位为0,关闭CAN2中断,该位为1,使能CAN2中断
10、CAN2IF:CAN2总线中断控制请求
      需要软件清零。

11、PCAN2H和PCAN2L:CAN2中断优先级控制位
    PCAN2H               PCAN2L                优先级
      0                        0                        0最低
         0                     1                        1
      1                        0                        2
         1                     1                        3最高

CAN总线地址寄存器---间接寻址

12、该寄存器位于扩展SFR区域,地址为7EFEBBH的位置,复位后,该寄存器的值为“0000,0000”
   寄存器名称   地址      B7             B6               B5             B4               B3                  B2            B1                   B0
       CANAR         7EFEBBH


CAN总线数据寄存器(CANDR)
13、该寄存器位于扩展SFR区域,地址为7EFEBCH的位置,复位后,该寄存器的值为“0000,0000”
   寄存器名称   地址      B7             B6               B5             B4               B3                  B2            B1                   B0
       CANDR       7EFEBCH

先把地址写入CANAR,再吧数据写入CANDR,然后映射到CANAR。


CAN模块内部功能寄存器
首先说明两路CAN控制器是硬件上完全各自独立的,两组CAN的内部寄存器也是各自独立的,只是访问地址相同。

14、当需要方位不同组CAN的内部寄存器时,需要首先通过AUXR2.CANSEL进行选择,然后就可以正确访问所对应的寄存器俪。

注意:这里需要特别强调,对CAN内部工嗯呢该寄存器进行读写均需要通过CANAR和CANDR进行间接访问。


读取CAN内部功能寄存器的方法

15、将CAN内部功能寄存器的地址写入CAN总线地址寄存器CANAR.
16、读取CAN总线数据寄存器CANDR

       比如:需要读取CAN内部功能寄存器ISR的值
                  CANAR =0x03;               //将ISR的地址写入CANAR
                  dat=CANDR;                     //读取CANDR以获得ISR的值


写CAN内部功能寄存器的方法

17、将CAN内部工嗯呢该寄存器的地址写入CAN总线地址寄存器CANAR
18、将待写入的值写入CAN总线数据寄存器CANDR
      比如:需要将数据0x5a写入CAN内部功能寄存器TXBUF0
                      CANAR=0x08;      //将TXBUFO的地址写入CANAR
                      CANDR=0x5a;          //将待写入的值0x5a写入CANDR      

注意:CAN模块内部功能寄存器的地址应该理解为以CAN总线地址寄存器为基地址的偏移量。   


19、CAN模式寄存器(MR)
   寄存器名称   地址      B7             B6               B5             B4               B3                  B2            B1                   B0
       MR                0x00      -                -                  -                -                   -                     RM             LOM            AFM

20、RM:CAN模块的RESET MODE
      当该位为0时,关闭复位模式。当该位为1时,使能复位模式。

21、LOW:CAN模块的只侦听模式
      当该位为0时,关闭只侦听模式,当该位为1时,使能只侦听模式。

22、AFM:CAN模块哦的接收滤波选择(参见ACR寄存器描述)两种过滤模式
       当该位为0时,接受率补齐采用双滤波设置。当该位为1时,表示接收滤波器采用单滤波设置。   滤波器==过滤器

23、CAN命令寄存器(CMR)
   寄存器名称   地址      B7             B6               B5             B4               B3                  B2            B1                   B0
       CMR               0x01      -                -                  -                -                   -                     TR             AT                     -

24、TR:CAN模块发送请求。
      该位为1时表示发起一次帧传输。

25、AT:CAN模块传输终止
      该位为1时表示终止当前的帧传输。



26、CAN状态寄存器(SR)
   寄存器名称   地址      B7             B6               B5             B4               B3                  B2            B1                   B0
       SR                0x02       RBS         DSO            TBS             -                  RS                   TS               ES                  BS

27、RS:接收BUFFER装填
      该位为0时,接收BUFFER无数据帧;该位为1时,接收BUFFER有数据帧。

28、DSO:接收FIFO溢出循环标志。
      该位为0时,接收FIFO没有溢出循环产生;该位为1时,接收FIFO有溢出循环产生

29、TBS:CAN模块发送缓冲区状态
      该位为0时,禁止发送缓冲区,CPU不可对缓冲区进行写操作;该位为1时,发送缓冲区空闲,CPU可对缓冲区进行写操作。

30、RS:CAN模块接收状态
      该位为0时,CAN模块接收空闲;该位为1时,CAN模块正在接收数据帧。

31、TS:CAN模块发送状态
          该位为0时,CAN模块接收空闲;该位为1时,CAN模块正在发送数据帧。

32、ES:CAN模块错误状态
       该位为0时,CAN模块错误寄存器值未达到96;该位为1时,CAN模块至少有一个错误寄存器的值达到或超过俪96

33、BS:CAN模块的额BUS-OFF状态
       该位为0时,CAN模块不再总线关闭状态。该位为1时,CAN模块在总线关闭状态。

34、当CAN控制器发生错误的次数超过255次,就会触发总线关闭错误。
       一般发生总线关闭的条件是CAN总线受环境干扰,导致CAN总线发送端发送到总线的数据被总线判断为异常,但异常次数超过255次,总线自动设置为总线关闭状态,此时总线处于忙的装填,无法发送数据和无法接收数据。


学习备注:此处的模块错误状态与总线关闭状态的简码在前面PPT稍微提一下,这面的标注代码,是否学习效果更好?


35、CAN中断/应答寄存器(ISR/IACK)

   寄存器名称   地址      B7             B6               B5             B4               B3                  B2            B1               B0
       ISR/IACK       0x03      -               AKI               EWI         EPI               RI                  TI               BEI            DOI

36、ALI:仲裁丢失中断
       该位为1时,仲裁丢失;写1时,将该位清零。

37、EWI:错误警告中断
       当SR寄存器中的ES或者BS值为1时,设置该位;写1时,将该位清零。

38、EPI:CAN模块被动错误中断
       当CAN错误寄存器操作被动错误计数值时,设置该位;当写1时,该位清零。

39、RI:接收中断
       该位为1时CAN模块接收中断,CAN模块接收缓冲区中存在数据帧,用户需要对RI写1,以减少接收信息计数器(RMC)值。

40、TI:发送中断
       该位为1时CAN模块发送中断,CAN模块数据帧发送完成,用户需要对TI写1,复位发送缓冲区写指针。

41、BEI:总线错误中断
       该位为1时CAN模块总线错误中断,CAN模块在接收或者发送过程中产生了总线错误。

42、DOI:接收溢出中断
       该位为1时CAN模块接收溢出中断,CAN模块接收FIFO溢出。


43、CAN中断寄存器(IMR)
   寄存器名称   地址      B7             B6               B5             B4               B3                B2            B1               B0
       IMR               0x04      -               ALIM          EWIM         EPIM            RIM               TIM         BEIM         DOIM

44、ALIM:仲裁丢失中断---设置是否允许
       该位为0时,禁止仲裁丢失中断;该位为1时,使能仲裁丢失中断。

45、EWIM:错误警告中断
       该位为0时,禁止错误警告中断;该位为1时,使能错误警告中断   

46、EPIM:CAN模块被动错误中断。
       该位为0时,禁止CAN模块被动错误中断;该位为1时,使能CAN模块被动错误中断。

47、RI:CAN模块接收中断
       该位为0时,禁止CAN模块接收中断;该位为1时,使能CAN模块接收中断。



48、CAN数据帧接收计数器(RMC)
   寄存器名      地址      B7             B6               B5             B4               B3                B2            B1               B0
       RMC          0x05          -            -                   -               [                           RMC                                     ]


49、CAN总线时钟寄存器0(BTR0)
   寄存器名      地址      B7             B6               B5             B4               B3                B2            B1               B0
       BTR0          0x06         ]             [                           BRP                                                       ]

50、BRP:CAN波特率分频系数,使用下面公式计算:
         BRP=BTR0+1
      CAN模块内部时钟周期:tq=t clk* BRP

       其中 t clk =1/fXTAL(主频二分频)

51、SJW:重新同步跳跃宽度,使用下面的公式计算:
      SJW= SJW * 2+SJW


52、CAN总线时钟寄存器1(BTR1)
   寄存器名      地址      B7             B6               B5             B4               B3                B2            B1               B0
       BTR1          0x07      SAM         [               TSG2      ]             [            TSG1                              ]

52、TSG1:同步采样段1

53、TSG2:同步采样段2

54、SAM:总线电平采样次数
      该位为0时,总线电平采样为1次;该位为1时,总线电平采样3次

55、CAN波特率可用下式计算:
      CAN采样波特率=1、正常时间位
       其中:
         正常时间位=(1+(TSG1+1)+(TSG2+1))* tq


56、CAN总线数据帧发送缓存(TXBUFn)
      CAN总线数据帧发送缓存寄存器分别位于偏移地址为0x08,0x09,0x0A,0x0B的位置。

   寄存器名      偏移地址      B7             B6               B5             B4               B3                B2            B1               B0
      TXBUF0          0x08         [                                          Frame byte n                                                                     ]   
      TXBUF1          0x09         [                                          Frame byte n   +1                                                               ]
      TXBUF2          0x0A         [                                          Frame byte n   +2                                                               ]
      TXBUF3          0x0B         [                                          Frame byte n   +3                                                               ]

57、发送BUFFER包含四个寄存器:TXBUF0-3
       每当写TXBUF3寄存器时,缓冲区指针自动加1,将TXBUF0~TXBUF3写入缓冲区

58、发送字节顺序:先是RTR确认数据帧还是远程帧,在确认数据长度(DLC),再写11位数据帧标示符,先写高八位ID10-3,再写低三位ID.2-0,在写数据1-8


59、CAN总线数据帧接收缓存(RXBUFn)
       CAN总线数据帧接收缓存寄存器分别位于偏移地址为0x1C,0x1D 、0x1E.0X1F的位置。

   寄存器名      偏移地址      B7             B6               B5             B4               B3                B2            B1               B0
      RXBUF0          0x0C         [                                          Frame byte n                                                                     ]   
      RXBUF1          0x0D         [                                          Frame byte n   +1                                                               ]
      RXBUF2          0x0E         [                                          Frame byte n   +2                                                               ]
      RXBUF3          0x0F         [                                          Frame byte n   +3                                                               ]

60、接收缓冲区包含4个寄存器:RXBUF0~3.
         每当(读?)写RXBUF3寄存器时,缓冲区指针自动+1,将RXBUF0~3,写入缓冲区。

61、一帧CAN的数据最长是16个字节,因此接收一帧数据需要循环读取接收缓冲区四次。
       CAN模块的RXFIFO是一个64字节FIFO。当数据位1个字节时,最多能保存21帧数据;当数据为8个字节时,最多能保存5帧数据,通过读取TCM存取器,可得到接受真的个数。


62、CAN总线接收代码寄存器(ACRn)
      这些寄存器分别位于偏移地址0x10.0x11.0x12.0x13的位置。

   寄存器名      偏移地址   B7             B6               B5             B4               B3                B2            B1               B0
      ACR0          0x10         [                                          ACR0                                                                                  ]   
      ACR1          0x11         [                                           ACR1                                                                                 ]
      ACR2          0x12         [                                          ACR2                                                                                  ]
      ACR3          0x13         [                                           ACR3                                                                                 ]

本课时学习完结。

学习备注:
1、此处的模块错误状态与总线关闭状态的简码在前面PPT稍微提一下,这前面的的知识点标注下后面的代码,是否学习效果更好?(因为跨课时学习,最起码能起到温故而知新把{:ciya:})
2、如果有CAN总线结构导图是否更辅助学习。
3、有时间的话还是要整个概念逻辑图。

更正一次错误-。-。复习才发现。

Jeff 发表于 2024-12-6 19:51:14

车规32位80C51中CAN2.0总线第六课时课时学习--何宾教授课程

1、CAN总线接受屏蔽寄存器(AMRn)
      ACMRn寄存器分别位于偏移地址0x14,0x15,0x16,0x17位置。

   寄存器名      偏移地址   B7             B6               B5             B4               B3                B2            B1               B0
      AMR0          0x14         [                                          AMR0                                                                                  ]   
      AMR1          0x15         [                                          AMR1                                                                                  ]
      AMR2          0x16         [                                          AMR2                                                                                  ]
      AMR3          0x17         [                                          AMR3                                                                                  ]

2、过滤消息的方式有两种,由模式寄存器中的AFM(MR.0)位选择,这两种模式为单个过滤器模式(AFM位是1)和过滤器模式(AFM位是0)

3、过滤规则:
             1)、每一位接受屏蔽分别对应每一位接受代码,当该位接受屏蔽位为“1”时(即设为无关),接受的相应帧ID位无论是否与相应的接受代码位相同均表示为接受。
             2)、当接受屏蔽位为“0”时(即设为相关),只有相应的帧ID位和相应的接受代码值相同的情况下才会表示为接受。
             3)、只有在所有的位都表示为接受的时候,CAN控制器才会接收改报文/消息。

4、单个过滤器的配置
      这种过滤器配置俪一个长过滤器(4字节,32位),由四个接受代码寄存器孼4个接收代码屏蔽器组成的接收过滤器,过滤器字节和信息字节之间位的对应关系取决于当前接收帧格式

对应关系图

                                        ACR0                     |               ACR1                        |                                                                     ACR2               |                               ACR3
    7         6       5      4      3       2       1      0   |   7         6       5      4       ----      |7         6         5          4          3          2          1      0         |       7         6         5         4         3             2      1      0   

                                        AMR0                     |               AMR1                        |                                                                     AMR2               |                               AMR3
    7         6       5      4      3       2       1      0    |   7         6       5      4       ----   |7         6         5          4          3          2          1      0         |       7         6         5         4         3             2      1      0   

ID.10    ID.9ID.8ID.7ID.6ID.5ID.4ID.3| ID.2   ID.1   ID.0    RTR ---- | DB1.7    DB1.6    DB1.5DB1.4   DB1.3   DB1.2DB1.1   DB1.0   |   DB2.7   DB2.6   DB2.5   DB2.4   DB2.3    DB2.2DB2.1DB2.0

5、接受CAN标准帧单个过滤器的配置
   1)、对于标准帧:11位标示符、RTR位、数据字段前两个字节参与过滤
   2)、对于参与过滤的数据,所有AMR为0位所对应的ACR位和参与过滤数据的对应位必须相同才算接收通过;

                                        ACR0                     |               ACR1                        |                                                                     ACR2               |                               ACR3
    7         6       5      4      3       2       1      0   |   7         6       5      4       ----      |7         6         5          4          3          2          1      0         |       7         6         5         4         3             2      1      0   

                                        AMR0                     |               AMR1                        |                                                                     AMR2               |                               AMR3
    7         6       5      4      3       2       1      0    |   7         6       5      4       ----   |7         6         5          4          3          2          1      0         |       7         6         5         4         3             2      1      0   

ID.10    ID.9ID.8ID.7ID.6ID.5ID.4ID.3| ID.2   ID.1   ID.0    RTR ---- | DB1.7    DB1.6    DB1.5DB1.4   DB1.3   DB1.2DB1.1   DB1.0   |   DB2.7   DB2.6   DB2.5   DB2.4   DB2.3    DB2.2DB2.1DB2.0

   3)、如果由于设置RTR为“1”而没有数据字节,或因为设置相应的数据长队代码而没有或只有一个数据字节信息,也会接收报文/消息。
   4、对于一个成功接收的报文/消息,所有单个位在滤波器中的比较结果都必须为“接受”。


6、接收CAN扩展帧时单个滤波器配置的结构。

                                        ACR0                                       |                                  ACR1                                             |                   ACR2                                             |                               ACR3
    7         6       5      4      3          2            1         0    |   7         6       5          4          3            2      1         0   |7         6         5          4    3       2       1      0   |    7       6      5      4         3             2      -   

                                        AMR0                                    |                                  AMR1                                              |                   AMR2                                             |                               AMR3
    7         6       5      4      3          2            1         0    |   7         6       5          4          3            2      1         0   |7         6         5          4    3       2       1      0   |    7       6      5      4         3             2      -      -   

ID.28 ID.27ID.26ID.25ID.24    ID.23   ID.22ID.21|ID.20 ID.19 ID.18   ID.17    ID.16   ID.15ID.14ID.13| ID.12ID.11ID.10ID.9ID.8ID.7ID.6ID.5 | ID.4ID.3   ID.2   ID.1   ID.0    RTR   -      -



7、CAN双过滤的配置
      这种配置可以定义两个短过滤器,由四个ACR和4个AMR构成的两个短过滤器
      1)、只要通过任意一个过滤器,就可以接收总线上的信息
      2)、过滤器字节和信息字节之间位的对应关系取决于当前接收的帧格式

8、接收CAN标准帧双过滤的配置关系

对应关系图--上面为滤波器2,下面为滤波器1

                                                                     ACR2               |                     ACR3
7         6         5          4          3          2          1      0         |       7         6         5         4   |   
                                                                  AMR2                  |                  AMR3
7          6         5          4          3          2          1      0      |       7         6         5         4   |
ID.10    ID.9   ID.8       ID.7      ID.6    ID.5      ID.4   ID.3    |   ID.2   ID.1   ID.0   RTR   |   DB1.7    DB1.6    DB1.5DB1.4| DB1.3   DB1.2      DB1.1   DB1.0   
   7         6          5            4          3          2            1         0    |   7         6         5          4      |   3            2         1          0      |      4       3             2         1   |
                                       AMR0                                             |                                           AMR1                                                |                      AMR3                   |
    7         6       5      4      3                  2            1         0    |   7         6      5            4   |   3            2         1          0      |   4         3         2      1       |
                                        ACR0                                             |                                          ACR1                                                |                     ACR3                  |


CAN总线接受屏蔽寄存器,如果接收的是标准帧信息,两个过滤器的定义是不一样的。
9、第一个顾虑器有ACR0、ACR1、AMR0、AMR1以及ACR3和AMR3低四位组成,11位标识符、RTR位和数据场第一字节参与过滤。

10、第二个过滤器由ACR2、AMR2以及ACR3和AMR3的高四位组成,11位标识符孼RTR位参与过滤。

11、为了成功接收信息,在所有单个位的比较时,应至少有一个过滤器表示接收。

   注意:RTR位置为“!”或数据长度代码是0,表示没有数据字节存在。

12、CAN总线错误信息寄存器(ECC)
   寄存器名称   地址      B7             B6               B5             B4               B3                B2            B1             B0
       ECC               0x18   ALIM         TXWRN       EDIR         ACKER          FRMER         CRCER      STFER         BER      

13、RXWRN:当RXWRN大于96时该位置位。

14、TXWRN:当TXERR大于96时该位置位。

15、EDIR:传输错误方向:该位为0时发送时发生错误;该位为1时,接收时发生错误。

16、ACKER:ACKER错误。

17、FRMER:帧格式错误。

18、CRCER:CRC校验错误。

19、STFER:位填出错误。

20、BER:位错误。


21、CAN总线错误接收错误计数器(RXERR)
   寄存器名   地址      B7             B6               B5             B4               B3                B2            B1             B0
       RXERR   0x19      [                                                RXERR                                                                     ]

22、RXERR表示计数器值代表当前接收错误计数值
      改寄存器只读
      当逛遍总线事件发生时,该计数器由硬件清零。


23、CAN总线发送错误计数器(TXERR)
   寄存器名称   地址      B7             B6               B5             B4               B3                B2            B1             B0
       TXERR         0x1A      [                                                TXERR                                                                     ]

24、TXERR表示发送错误计数寄存器反映俪发送错误计数器的当前值。
       在CAN控制器工作时,该寄存器为只读。
       在硬件复位后,将该寄存器初始化为0.
       当总线关闭事件发生后,将错误计数器初始化为127,以计算总线定义的最小时间(128个总线空闲信号)
       该段时间里读发送错误计数器将反映出总线关闭恢复的状态信息。

25、CAN总线仲裁丢失寄存器(ALC)
   寄存器名   地址      B7             B6               B5             B4               B3                B2            B1             B0
       ALC          0x1B          -                -               -            [                                  ALC                                 ]

26、ALC说明这个寄存器包括俪总线仲裁丢失的位置的信息
       当处理完当前仲裁丢失中断(应答)之后,该值会在下一次仲裁丢失时更新。

      ALC           数值                                                描述
         00000                0                                          Arbit lost   in ID28/11
         00001                1                                          Arbit lost   in ID27/10
         00010                2                                          Arbit lost   in ID26/9
         00011                3                                          Arbit lost   in ID25/8
         00100                4                                          Arbit lost   in ID24/7
         00101                5                                          Arbit lost   in ID23/6
         00110                6                                          Arbit lost   in ID22/5

未完待续,不小心点了回复-。-


Jeff 发表于 2024-12-6 21:15:46

27、STC官方给出的基于STC32G系列单片机和NXP(中文摁着扑)TJA1050收发器的参考电路。
         建议使用官方开发板,自行焊接TJA1050,加深电路引脚熟悉。

         1、4脚100欧姆是限流电阻。
         0.1U(104) 22U(C18)是高低通滤波电容-USB电源高低频过滤处理。
         R85.R86两个0欧姆电阻为俪方便嫁接。
         C10,C11两个接地前的30P主要为过滤信号,120欧姆的R87必须接,即可以充当发送也可以接收?难道是传说中的可攻可受?都怪这发达的互联网啥都说,也不搂着点,差点把纯洁滴俺带沟里-。-

28、TJA1050内部电路图分析。通过偏置电压控制CAN总线电平的逻辑分析。

29、代码讲解:
       初始化发送数据TX_BUF,指定CAN_ID号码:
       CAN通信发送数据:调用CanSendMsg函数(),赋值CANID号和TX_BUF参数
       CAN通信读取数据:调用CanReadMsg函数读取CAN总线数据,然后发送总线参数内容

30、CanwriteReg写函数讲解(取出信息),一个是地址,一个是数据参数。

31、CanReadReg读函数讲解。输入地址,定义变量,间接寻址找到地址的里面保存的数据(两步),然后返回数据-------------这一步和普通编程赋值不同定义不同,知识点,圈起来。{:4_202:}

32、CanSendMsg函数讲解:
       复习CAN总线数据帧发送缓存步骤(写寄存器顺序),先写帧RTR(是远程帧还是数据帧)---再写数据长度DLC---再写11位标识符---然后再写发送数据
       实际程序代码先移动五位,的调用CanWriteReg函数,先写帧标识0寄存器,在写1寄存器高8位,在写2寄存器的CanID,再写3寄存器Pdat,虽然写了8个,最后多写一个空字节,然后把BUF0\1\2三个寄存器里面的东西移到CAN总线缓冲区,(就这颠三倒四的做法,让俺小学数学老师早叫他出去罚站了-。-)

33、CanReadFifo函数讲解:读取CAN缓冲区数据函数。
       通过Fifo轮询中断读取缓冲区的BUF0\1\2\3,在读取信息函数CanReadMsg函数里面调用CanReadFifo函数然后轮询读取,读取信息函数CanReadMsg在通过Fifo函数读取完毕后,还要与前面匹配的左移右移的位移操作在这个函数里拼接数据和CanID,然后数据归类,尘归尘土归土---这是这个函数的关键点(数据读取与拼接),怎么感觉当初设计这存储协议的不是喝多了就是老司机,很会摇摆-。-

33、CAN总线中断函数CANBUS_Interrupt函数判断引起冲动中断的情况,标志清零,然后恢复CAN中断信息现场。

34、实况演示:路人甲吐血提醒,U5U6一定要焊上。注意左CAN收发器焊接5和6容易短路、3和4管脚容易短路,右收发器3和4管脚也容易短路。注意CANH\CANL是通路,TXD和RXD也是通路。

       演示代码里面关注主函数的CanPollubg()   

35、CAN助手使用讲解:安装CDC驱动,两路CAN模块通讯测试。

本课时学习完毕。

Jeff 发表于 2024-12-6 21:16:50

不是8课时吗?怎么只有6课时,还想放出来俺学习呢?{:xu:}

芯LYS 发表于 2024-12-7 09:03:40


楼主也可以结合 冲哥视频 讲解实验箱的应用视频 。认真学习打卡的都可以送实验箱
视频教学:《32位8051单片机原理及应用》,一等奖2万, 送实验箱; 冲哥版
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=323
(出处: 国芯技术交流网站)



Jeff 发表于 2024-12-7 12:58:30

Jeff 发表于 2024-11-27 16:47
学习记录:
车规32位80C51中CAN2.0总线第三课时学习。
1、CAN2.0A,B总线定义


学习回头看,更正:本笔记里面提到的大端小端是编程术语,在芯片行业正确叫法是高位和低位。

Jeff 发表于 2024-12-11 09:17:12

<p>h<p><img src="data/attachment/forum/202412/11/091524x37hshshpwhgvsn7.jpg" alt="STC实验箱冲哥版2.jpg" title="STC实验箱冲哥版2.jpg" /></p></p>
<p><img src="data/attachment/forum/202412/11/091551fm9n5ltjppgjm993.jpg" alt="STC实验箱冲哥版.jpg" title="STC实验箱冲哥版.jpg" /></p>
<p>已收到STC实验箱,活动真实有效,感谢STC,感谢刘经理</p>
页: [1]
查看完整版本: 打卡学习 |已送