1 在配置预分频系数的时候(CAN控制器)
can控制器
can——cabcontroller中给的预分频系数配置与 can时钟频率 还有波特率有关
配置好这两个,就可以根据系统配置配置好
时钟频率可以在MCU模块中看到,TC275是80Mhz
波特率的配置和 位时间参数的配置有关,要配置好控制器的同步段宽度等一些参数,然后可以根据系统配置完成
这里的位定时参数,需要查看CAN的通信协议11898里面数据链路层定义了位定时参数的相关定义,比如采样位置、TQ梳理、同步跳转宽度等
可以看到位时间为2000ns(2微秒),因为FHSCAN=500,1/500K=2000ns
位时间中有:同步段、相位缓冲段。相位缓冲段1的结束和相位缓冲段2的开始就是采样点(75%-82%)。整个段的长度最小值位10个TQ,最大值位20个TQ。采样宽度就是整个位时段
对应下图中的2个相应配置就是16个tq和4个tq:
第一个段(同步段 synchronization segment)默认为1个TQ,所以controller PROpseg可以设置为11,Controller seg2 可以设置为4个tq (5和10,会导致出错,因为cfg会希望前面一个大于后面一个,具体原因应该是系统决定的)
配置完后分频系数如下进行配置:
2完整配置链路(导入全新的dbc)
配置步骤:
1 CAN(can控制器、can邮箱等)
2 CANif模块 需要进行重新索引
3 pdur和canif强关联
4 COM模块,因为上层没有mapping会报错
5 BSW meneger
6 CANtp模块诊断相关的
7配置CANtrcv模块: 重新索引(一个)
8 OS模块(can中断被改变了,因为CAN控制器没弄好):
9配置Dcm模块(诊断模块中的东西):按照原来的项目配置,然后索引CAN通道
10最后剩下RTE等的问题,需要在DEV中去解决(softdesiner中删除旧的数据,然后再datamapping中mapping将数据信号,将底层的信号(cfg中配置好的信号)弄到应用层(appcomtx等)去使用。以signal group位单位mapping数据。然后再softdesigner中拖动信号组放到应用层去使用,同时迪纳基模块将接口全部添加mainfucion的access)
13 CFG中重新生成,同步,编译
3 找错误的时候 (就是完整链路配置的时候 出现收不到报文)
1 在任意的mainfuction函数 是否能够进来报文 (能进来说明没跑死)
2 can中断进行打断点 (看是否能够进来)不能进来 ,能进来排查其他错误
3 看com看com通道是否被打开了,如果打开了
4 就看can控制器和can收发器是否被打开了
关键是熟悉代码,从链路层查找问题。
最后的问题是:cansm模块切换收发器的时候 CAN收发器,没有和控制器索引上,导致无法和can收发器索引上
最后在canoe进行测试,测试报文周期,平均周期等时间 进行报文测试
4CDD(配置新得一路通讯CAN得时候 用于内部通信 或者 是MCU中两个芯片建立通信)
标准BSW模块或Rte交互
1 制作DBC(里面是内部的),制作一个只有一个报文(一个发送报文,一个接收范围报文)的dbc文件,然后将该dbc加载进cfg中去,作为内部通信can的报文
注:1 内部通信使用,不会往com层送(sopport取消),dbc配置,2 DBC名字(networks节点下面)要修改,不然不可以合并
2 然后开始配置(CAN、CANM、OS、ECUC、CDD模块、CANif、RTE)
3 打开CAN通道(BSW menege中打开,COMallow中加进来新的com通道,Allow之后还需要调一个com请求,一直请求fullcom(一直保持通讯得状态配置,让他一直永远请求fullcom))
4 因为配置一路can需要
注:内部CAN和整车CAN的区别:
1 内部can不要送到com层去
2 内部can没有网管配置,外部不用给唤醒,一直处于活动状态,因此cannm模块和nm模块配置的内部can都删除
3 整车can的passive mode enable的勾选取消,因为如下翻译整车can肯定需要NM节点来唤醒,因此取消勾选。
(该参数决定了网络是否启用被动模式。以下是这段文字的翻译:
如果设置为TRUE,则启用网络的被动模式。被动节点不能发送NM PDU(网络管理协议数据单),因此无法保持网络处于唤醒状态。然而,被动节点可以通过接收其他ECU(电子控制单)的NM PDU来被网络唤醒。
如果设置为FALSE,ECU将能够通过发送自己的NM PDU来保持网络处于唤醒状态。)
4 内部can的预分频系数,同步段事件,相位缓冲段等的时间配置,由公司内部进行规定(目前就按照整车can的配置)
5 ComM模块中的NM Variant配置
内部通讯CAN需要她一直请求,配置none(然后grobe pass mode 要配置成为ture; 在comgenerate中配置和NM模块中将passivemode配置成ture;并且在NM模块删除内部通信得报文)
6 OS的配置,要将内部通信CAN的优先级拉低 Isl interrupt Priority
7 配置EcuC:
刚刚在dbc中设置了,不发到com模块中去,所以在com模块中不会生成那两个通讯报文
Pdur也不会生成,但是在EcuC中生成了
报文从can模块送到CANif模块就找不到上层了
而EcuC是索引CANif和上层模块的,所以会报错。
我们通讯报文不往常规链路层上层发送,就选择CDD为他的上层
在CANif中配置CDD,CDD就是上层模块自定义
CAN 到CANIF 就到CDD模块了(ECUC可以理解为canif和cdd模块的桥梁)
8 BSW menege模块中去把CAN通道给打开
Allow 内部通信CAN(再bsw menege模块的 auto configuration ECU state handing模块中的Ruler的ESH wakeuptorun 查看action,要allow内部通信can)
Runtopost是管理休眠的
然后再ESH_wakeuptorun中添加一个action,让内部通讯can可以被唤醒后一直保持通信,保持comfullcan的状态(添加一个comM_mode_swich,然后请求模式是BSWM_FULL_COM)
在ESH_RUNtopostrun,暂停管理中,将内部通讯can有关的去掉,有一个自动生成的条件,就是内部通讯can变成nocom的时候i,将其删除,因为该can的状态永远是fullcom
9 将CAN收发器打开,通过EB mcal配置,将cantx和canrx的io口配置正确,以及控制收发的STB引脚(CAN_STB拉低就是standby模式,拉高是nomal模式)。
10 CAN中断配置(OS模块和CAN模块),can中断源(OsIsrInterruptSource 自己计算查看芯片手册,通过使用的哪路can以及计算公式)以及CAN控制器所用的节点,要通过芯片手册配置
CanPhysicalNode、CanIOPort、CanPhysicalNode、CanIOPort(Receive input selection)
11 CDD中写测试代码,接收到数据就,计数器加1 (该部分报文直接链接从)
12 CDD中目前只可以接收道0x100的报文,如下问题
此处比较特殊:因为他不是网管报文,网管报文可以直接creat range,非网管报文,前面的bacsic配置的canfeiltermask确保了所有报文可以进入ccan中断,但是没有进入该函数,目前配置就是将所有报文可以进入该函数。
然后此处的范围由2种配置方法:1 create range
2 id可以用作code使用,然后下面是mask根据receive & mask =mask & code公式同样可获取范围
此处0x00和0x00
12 该通道发送报文:从appctrl中使用canif_transmit函数,发出0x100的报文
CanInter_Transmit();
5 网络管理的机制(网络状态管理机)
6 网络管理部分的测试(几个时间)
1、KL30上电后,MCU软件会初始化,进入到BSM状态并保持,直到有唤醒源进行唤醒,才会进入到下一个状态
2、当DUT在BSM状态接收到外部唤醒源后,进入到RMS状态
1)并在T_WakeUp时间内发出第一帧网络管理报文,且第一帧报文只能是NM报文,不能是APP报文;
2)在发出第一帧NM报文后的T_Start_App_Tx时间内,必须发出APP报文;
3)在重复报文状态,需要将重复报文状态为置1,如果存在快发就以快发周期(T_ImmediateCycleTime)发送;
4)在重复报文保持的时间为T_Repeat_Message。
3、在RMS状态结束后,会出现2种情况;一种是如果检测到有保持源的情况下,他会进入到NOS状态(我们常见的保持源是KL15、IG、NM Msg);另外一种是没有保持源的情况下,他会直接进入到RSS状态;
4、如果在第3步成功进入到NOS状态,这个时候我们的DUT处于正常的工作状态,只要保持源存在,我们会一直保持在NOS状态,NOS状态NM报文以周期T_Nm_MessageCycleTime持续发送;
5、如果在NOS状态接收到重复状态位为1的NM报文,它会再次进入到RMS状态,这时候我们会回到步骤3;
6、如果DUT在NOS中丢失了保持源,它就会停发NM报文并进入RSS状态。
7、如果在RMS状态结束后没有接收到保持源进入到了RSS状态,在这里就会出现3种情况:
1)接收到保持源,它会进入到NOS状态
2)接收到重复报文状态位为1的NM报文,它会再次回到RMS状态,DUT会在T_Start_NM_Tx时间内发出NM报文
3)没有接收到任何报文的话,等待T_Nm_TimeOut超时后,会停发App报文并进入到PBSM状态
8、在PBSM状态中,等待T_Wait_Bus_Sleep时间后,就关闭CAN收发器,并进入到低功耗模式
以上就是Autosar完整的处理逻辑,并且每一个位置的处理信息和处理点都有详细的描述,整个网络管理跳转状态 也清晰的展示给了大家。
T_Start_NM_Tx 10ms 节点在NOS或者RSS状态进入到RMS状态的最大时间
T_Start_App_Tx 20ms 第一帧NM报文和第一帧APP报文的时间最大偏差
T_ImmediateCycleTime 20ms 快发NM报文周期
T_Nm_MessageCycleTime 100ms 网络管理报文时间周期
T_WakeUp 100ms KL15或者NM报文唤醒到首帧NM Msg发出的时间最大值
T_ImmediateNm_Times 10 重复报文状态时的快发报文帧数
T_Repeat_Message 1500ms 节点在RMS状态中持续的时间
T_Nm_TimeOut 2000ms 在RSS状态后等待该时间进入到PBSM
T_Wait_Bus_Sleep 2000ms 确保所有的节都停止网路活动
今天的文章 CAN通信开发过程中比较难得地方分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/96160.html