📄 sample3_readme.txt
字号:
/********************************************************************/
2006.09.11.
R8C/23 CAN/LIN 演示板 样例程序说明
Sample3:LIN主机
/********************************************************************/
<操作环境>
* MCU : R5F21237JFP ES
* CPU Clock : 20MHz
<实现功能>
进度表调度;
外界事件触发唤醒;
接收其余节点的唤醒;
基本的LIN通信,数据的收发;
发送休眠命令,进入休眠状态;
4s总线无活动,自动进入休眠状态;
错误类型界定;
可以修改帧时隙(一个完整的帧传输完毕需要的时间)。
<说明>
* LIN 波特率:9600bit/s
* LIN主机包括5个状态
SLEEP状态(初始状态),等待接收/发送wakeup;
RESET状态,初始化进度表;
RUN状态,LIN主机通信状态;
IDLE状态,检测总线活动,准备进入睡眠;
ERROR状态,发生错误后进入该状态,通信停止。(用户可以根据需要添加错误处理函数)
* 通信过程
启动LIN主机前,可以在SCHEDULE_TABLE处修改进度表。
进度表修改后,需再schedule_include_frm_num将相应进度表所含的帧数同时修正。
目前样例程序支持最多4个进度表,每个进度表最多包含4个帧。
用户可根据需要进行扩展,将lin_frm,lin_sch中关于进度表和帧的总属性值相应标志位增加位数或变为多个字节。
主机启动后,处入休眠状态时,将检测:
1)主机应用层是否有事件发生,若发生事件,则发送wakeup信号(250us的显性电平);
2)总线上是否有wakeup信号(>=150us的显性电平);
若有则等待100ms后启动进度表,从机对此等待时间的判断阈值为150ms。
发送header的break段; 发送header的同步段;发送header的ID段,并根据ID,判断
1) 是由主机发送帧的数据段,则发送数据段,判断是否为休眠命令,若是马上转入休眠状态。
2) 不是由主机发送帧的数据段,分析ID,选择是否接收数据段,检查校验和(标准型)。
发送/接收/忽略 完数据段后,再次进入发送header的状态。直到进度表完成。
进度表完成后,4s后自动进入休眠状态。
* 错误代码
1) UART传输时发生的错误:
UART_OVERRUN_ERROR(uart过载错误)
UART_PARITY_ERROR(uart奇偶校验错误)
UART_FRAMING_ERROR(uart传输错误)
2) LIN错误
LINRX_CHECKSUM_ERROR(校验和错误)
SHORT_MESSAGE_ERROR(消息不全错误: 在接收数据段时,未接收到数据段或数据段不完整)
* 帧的定义
除去受保护ID的两个奇偶校验位,帧ID共6位,后四位为cmd,前两位为DLC(数据长度码),参见lin_master.c中table的注解部分:
帧ID = 0x31,0x3C主机发送,所有从机接收;0x3c为诊断帧,若数据段的第一字节为零,则为休眠指令(协议强制规定);
其余帧ID主机根据需要接收或忽略。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -