? ? ? ?NXP S32K358一共有8路can,都支持Can FD和Classical Can。其中FlexCan0-2是增强型CAN,支持8byte的mailbox 96个。FlexCan3-7支持8byte的mailbox 64个。
在NXP S32K358中增强CAN的波特率采样点的寄存器和普通CAN是不同,一共有五个寄存器和波特率采样点相关。
增强型can的采样点计算公式如下,在采用增强型CAN模块工具会自动配置如下两个寄存器
普通can CTRL1寄存器
普通Can FD寄存器配置
配置CAN0,can模块时钟为40M,仲裁帧波特率为500K,采样点为80%,数据帧波特率为2M,采样点为75%。
下面介绍两个缩写
Tseg1:Time Segment1
Tseg2:Time Segment2
采样样点计算= (Tseg1+SYNC_SEG)/(Tseg1+SYNC_SEG+Tseg2)
SYNC_SEG:固定为1
Tseg1=controller prop seg +cantroller seg1(davinci cfg配置项)=NTSEG1(芯片寄存器)+1
Tseg2=cantroller seg2(davinci cfg配置项)=NTSEG2(芯片寄存器)+1
Can时钟为40M,仲裁帧配置如下8分频,则分配到can模块的时钟为5M,仲裁帧波特率为500k,则每个bit time有10个Tq。采样点为80%,则cantroller seg2 = 2,controller prop seg +cantroller seg1 = 7
则如下图配置:
Can时钟为40M,数据帧配置如下1分频,则分配到can模块的时钟为40M,仲裁帧波特率为2000k,则每个bit time有20个Tq。采样点为75%,则cantroller seg2 = 5,controller prop seg +cantroller seg1 = 14
SYNC_SEG:固定为1
Tseg1=controller prop seg +cantroller seg1(davinci cfg配置项)=DTSEG1(芯片寄存器)+1
Tseg2=cantroller seg2(davinci cfg配置项)=DTSEG2(芯片寄存器)+1
则如下图配置:
由于数据帧和仲裁帧速率不同,需要勾选BRS选项。
生成代码关联寄存器如下:
配置CAN3,can模块时钟为40M,波特率为500K,采样点为80%。在davinci cfg中CAN3属于普通can,因此和增强can是两个模块,区别如下图:
采样样点计算= (Tseg1+SYNC_SEG)/(Tseg1+SYNC_SEG+Tseg2)
SYNC_SEG:固定为1
Tseg1=controller prop seg +cantroller seg1(davinci cfg配置项)=EPROPSEG+
EPSEG1(芯片寄存器)+2
Tseg2=cantroller seg2(davinci cfg配置项)=EPSEG2(芯片寄存器)+1
Can时钟为40M,仲裁帧配置如下8分频,则分配到can模块的时钟为5M,仲裁帧波特率为500k,则每个bit time有10个Tq。采样点为80%,则cantroller seg2 = 2,controller prop seg +cantroller seg1 = 7
则如下图配置:
生成代码如下图:(如果只用Classical Can个人理解CBT寄存器和CTRL1寄存采样点配置是一样的)
注意如果普通can配置Can FD的话自己写寄存器有如下区别:
Tseg1=controller prop seg +cantroller seg1(davinci cfg配置项)=FPROPSEG+
FPSEG1(芯片寄存器)+1(此处在手写驱动代码采样点容易算错)
Tseg2=cantroller seg2(davinci cfg配置项)=FPSEG2(芯片寄存器)+1
此处发现目前所配置davinci cfg的配置生成代码是采用RxFiFO filter配置,没找到mailbox+mask寄存配置的选项,如下图:
Filter code value 是想收的canID,如图想收canID:0x3c0
Filter mask value是相对于Filter code value为基准,bit=1校验该位,0忽略此配置,此配置是只接收0x3c0
Rx FIFO的结构如下,可以进行128个ID的点对点滤波
CanHardware配置Rx在前,Tx在后。
Rx hardwaare如下配置,
配置如下Fd Padding Value:大于8byte长度的canfd数据填充值
Handle Type: BASIC? 一对多接收,可以通过底下Filter mask ref来决定收那些can id,或者不进行滤波,接收所有的canid
? ? ? ? ? ? ? ? ? ? ? ? ?Full? ?一对仪接收,一个CanHardware只能接收一个canID。
如果存在多个Rx?CanHardware,应该是Full Rx在前,basic Rx在后
Object type :接收的CanHardware或者发送的CanHardware
主要几个rx tx busoff 和唤醒功能怎么处理。如果采样轮询方式需要配置mainfunction的周期。如果采用中断方式需要在os中配置中断。
轮询方式配置调用:
中断方式的os配置,can0-2有四个中断,can3-7有三个中断,此处的isr interrupt source在数据手册中查找。