写在开头
这个刚开始接触的时候有点难度,很正常,好歹没有旷日持久的事情,慢慢的象我这么笨的
人也能慢慢理解,高考考了2次才勉强上个二本,上了大学又无所适从整天玩游戏,很快四年过去了那会一脸蒙蔽,工作了才开始各种后悔。没有好好学习,有自己的因素也有环境的因素,不扯了总不能一直象中学一样需要人盯着你学习吧。绝大多数的学习还是没有掌握方法所以才不得要领,学起来很吃力,我就是这么样的人,哭死。。。
没办法生活要继续就慢慢悟吧…也没有白白浪费的阅历就当是自我安慰了。
下面开始LIN 以及Canoe的一些学习笔记如有错误恳请指正
协议规范:
New Frame/New Table
帧里有信号
报头 响应
间隔场 同步场 标志符场
显性间隔间隔界定 字节间隔 响应间隔
发送一个字节需要10个位时间(Tbit)
Start bit 0-7 Stop bit
间隔场(BreakField) = 间隔信号(至少13个显性位组成)+间隔界定符(至少由1个隐性位)
同步场(SyncBreak Field): 为了确保所有节点使用与主节点相同的波特率发送和接收数据
一个字节结构固定0X55;
Start bit 1010 1010 Stop bit
标志符场(IdentifierField):
Start bit 0-5 P0 P1 Stop bit
ID 0-63
奇偶校验(baidu 查不复杂)P0,P1
以上就是整个报头的内容
下面就是响应:
数据场(Data field)1-8个字节
Start bit (LSB) b0 b1 …Stop bit
最后是校验和场(Checksum Field)
校验数据是否正确
又分经典校验/增强校验(协议版本不同1.3/2.0)
0x3C 0x3D只能使用经典校验
翻转8位和校验(不是很复杂:先是相加超过FF就减掉FF,最后剩下的+X要=FF;这个X就是Checksum的数据)
帧长度(FrameLength):
最小帧长度13+1 = 14bit 8+2 8+2 (8+2)*(1-8) 8+2
最大= 1.4*(最小)
帧类型(FrameType):
Unconditional frame
Event triggered frame
Sporadic frame
Diagnostic frame
User-defined frame
Reserved frame
调度表(Schedule Table)
LIN总线最小时间单位Tbase
一帧报文的时间称为TFrame__Slot
偏移(Jitter)
偏移是指一帧报文实际开始发送的时刻与帧时隙起点的时间差
主任务行为模型(Task Behavior Model)
从任务行为模型:
网络管理(NM)
Reset-> initial->work->Sleep->Initial
初始化到工作状态要在100ms内完成
工作模式接收睡眠命令或总线空闲4-10s进入睡眠
睡眠模式接收到唤醒信号或者内部唤醒请求进入初始化
(拉低电平(显性电平)唤醒)
ID 0X3C 0 FF FF FF FF FF FF FF 睡眠命令
唤醒(wake up):
在一个处于睡眠状态的LIN网络中,任何一个节点都可以发送唤醒信号
唤醒信号是一个250us(在20Kbit/s波特率下的0xF0)到5ms(在1Kbit/s波特率下的0xF0)的显性电平
每一个从节点都需要做检测唤醒信号(持续150us以上的显性位)
当检测到唤醒信号之后,在100ms以内完成初始化工作
当从节点发出唤醒信号之后150ms,主节点仍未发送报头时,从节点可以再次发送唤醒信号。当连续发送了3次唤醒信号之后如果主节点仍未发送报头,从节点要等待1.5秒以后才可以再次发送唤醒信号
接收节点检测的唤醒信号:
状态管理:
每个从节点用Response_Error(1bit)来表示自身状态,这个位需要通过响应来发送