6.5 调整同步的规则
硬件同步和再同步遵从如下规则。 1) 1 个位中只进行一次同步调整。 2) 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。 3) 在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。 4) 在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件(1)和(2),将进行再同步。 但还要满足下面条件。 5) 发送单元观测到自身输出的显性电平有延迟时不进行再同步。 6) 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。
第7部分 位时间实例
本部分将根据Infineon的芯片手册对位时间如何计算和如何配置位时间的寄存器进行说明。
假设我们有一条需求:设置CAN通讯的波特率为500KBaud。
7.1 计算
Infineon芯片手册提供的CAN总线位时间标准格式定义如下图,后面根据该定义进行求解。
CAN总线位时间标准
设:晶振时钟周期频率为40MHz,转换为时间表示则为T=1/40MHz=25ns
NBT=16(即一个位有16个tq,time quantum),
因为要设置的波特率为500KBaud,换算时间表示则为1/500KBaud =2000ns,即传输一个位的时间要2000ns。那意味着16个tq就等于2000ns,即tq=125ns。
又因为有:
所以:tq/T=125ns/25ns=5,因为BRP只能为整数,这时取DIV8=0, BRP=4。
我们已经NBT=16,假设我们采样点取在50%处,即有:
50%=Tseg2/NBT=[(TSEG2+1)tq]/16*tq=(TSEG2+1)/16
即有:TSEG2=7。
那么Tseg1= NBT-Tseg2-Tsync=7tq,所以TSEG1=6。
再根据下式计算SJW, 这里直接假设TSJW=3*tq能保证下式两个不等式成立(不在此处展开Tprope的讨论),那么SJW=2。
综上有:DIV8=0, BRP=4,TSEG1=6,TSEG2=7,SJW=2。
7.2 寄存器配置
根据上节的计算结果进行位时间寄存器的配置,关于该寄存器的内容以及配置信息见下图。
位时间寄存器说明
经过上述配置,我