参考瑞萨ldf文件进行理解
//注意:LDF语言要区分大小写的!
LIN_description_file; //LIN描述文件
LIN_protocol_version = “2.1”; //LIN协议版本
LIN_language_version = “2.1”; //LIN语言版本
LIN_speed = 19.2 kbps; //LIN通信速度
节点定义
抖动(Jitter)为帧的同步间隔段的下降沿与帧时隙起始时刻相差的时间。时基(Time Base)为LIN子网的最小计时单位,通常设定为 5ms或 10ms。
Nodes
{
Master: CEM, 5 ms, 0.1 ms; //主机节点,名称:CEM,时基:5ms,抖动:0.1ms
Slaves: LSM, RSM; //从机节点,LSM,RSM
}
信号定义
根据上面定义的主从节点编写具体的信号
Signals
{
InternalLightsRequest: 2, 0, CEM, LSM, RSM; //信号名称:IntLightsRequest,
//长度:2bit,初始值:0,
//发布节点:CEM,收听节点:LSM、RSM
RightIntLightsSwitch: 8, 0, RSM, CEM; //信号名称:RightIntLightsSwitch,
//长度:8,初始值:0,
//发布节点:RSM,收听节点:CEM
LeftIntLightsSwitch: 8, 0, LSM, CEM; //信号名称:LeftIntlLightsSwitch,
//长度:8,初始值:0,
//发布节点:LSM,收听节点:CEM
LSMerror: 1, 0, LSM, CEM; //信号名称:LSMerror,长度:1,初始值:0,
//发布节点:LSM,收听节点:CEM
RSMerror: 1, 0, RSM, CEM; //信号名称:RSMerror,长度:1,初始值:0,
//发布节点:LSM,收听节点:CEM
IntTest: 2, 0, LSM, CEM; //信号名称:IntTest,长度:2,初始值:0,
//发布节点:LSM,收听节点:CEM
}
帧定义
上面信号定义中的长度单位是 bit位 帧定义长度单位是 字节
帧是由信号所组成,基本都是无条件帧。事件触发帧和偶发帧很少会用到这里没有列出。
Frames
{ //帧定义
CEM_Frm1: 0x01, CEM, 1
{ //帧名称:CEM_Frm1,帧ID:0x01,
//该帧的发布节点:CEM,数据段为1个字节
InternalLightsRequest, 0; //包含的信号名称
//为 InternalLightsRequest,
//在帧中的偏移量为0
}
LSM_Frm1: 0x02, LSM, 2
{ //帧名称:LSM_Frm1,帧ID:0x02,
//该帧的发布节点:LSM,数据段为2 个字节
LeftIntLightsSwitch, 0; //包含的信号名称为LeftIntLightsSwitch,
//在帧中的偏移量为0
}
LSM_Frm2: 0x03, LSM, 1
{ //帧名称:LSM_Frm2,帧ID:0x03,
//该帧的发布节点:LSM,数据段为1 个字节
LSMerror, 0; //包含的信号名称为LSMerror,帧中偏移量为0
IntError, 1; //包含的信号名称为IntError,帧中偏移量为1
}
RSM_Frm1: 0x04, RSM, 2
{ //帧名称:RSM_Frm1,帧ID:0x04,
//该帧的发布节点:RSM,数据段为2 个字节
RightIntLightsSwitch, 0; //包含的信号名称为 RightIntLightsSwitch,
//在帧中的偏移量为0
}
RSM_Frm2: 0x05, RSM, 1
{ //帧名称:RSM_Frm2,帧ID:0x05,
//该帧的发布节点:RSM,数据段为1 个字节
RSMerror, 0; //包含的信号名称为 RSMerror,帧中偏移量为0
}
}
节点属性定义
P2_min: 从 LIN 子网接收到主机请求帧到 LIN 的从机节点准备好数据发送应答之间的最小时间间隔。
ST_min: 从机节点准备接收下一个帧(主机请求帧)或准备发送下一个帧(从机应答帧)的应答部分所需要的最小准备时间。
Node_attributes
{ //节点属性定义
RSM
{ //节点名称为RSM的节点的定义
LIN_protocol = “2.0”; //该节点依据LIN 协议 2.0设计
configured_NAD = 0x20; //配置 NAD为 0x20
product_id = 0x4E4E, 0x4553, 1; //产品ID:厂商ID为0x4E4E,
//功能 ID为 0x4553,可变 ID为 1
response_error = RSMerror; //应答错误名称:RSMerror
P2_min = 150 ms;
ST_min = 50 ms;
configurable_frames
{
Node_Status_Event = 0x000; CEM_Frm1 = 0x0001; LSM_Frm1 = 0x0002; LSM_Frm2 = 0x0003;
}
//可配置的帧列表
}
LSM
{ //节点名称为LSM的节点的定义
LIN_protocol = “2.1”; //该节点依据LIN 协议 2.1设计
configured_NAD = 0x21; //配置 NAD为 0x20
initial_NAD = 0x01; //初始 NAD为 0x01
product_id = 0x4A4F, 0x4841, 1; //产品 ID:厂商 ID为 0x4A4F,功能ID为 0x4841
response_error = LSMerror; //应答错误名称为:LSMerror
fault_state_signals = IntTest; //错误状态信号为 IntTest
P2_min = 150 ms;
ST_min = 50 ms;
configurable_frames
{
Node_Status_Event; CEM_Frm1; LSM_Frm1; LSM_Frm2;
}
//可配置的帧列表
}
}
任务进度表
对于总线上报文发送进行调度的间隔顺序定义
Schedule_tables
{ //进度表定义
Configuration_Schedule
{ //进度表名称为:Configuration_Schedule
AssignNAD {LSM} delay 15 ms; //给节点 LSM分配NAD,帧时隙为 15ms,
AssignFrameIdRange {LSM, 0} delay 15 ms;
//给节点 LSM从第0 帧开始分配 PID,
//帧时隙为15ms
AssignFrameId {RSM, CEM_Frm1} delay 15 ms;
//给节点 RSM的帧 CEM_Frm1 分配PID,
//帧时隙为15ms
AssignFrameId {RSM, RSM_Frm1} delay 15 ms;
//给节点 RSM的帧 RSM_Frm1 分配PID,
//帧时隙为15ms
AssignFrameId {RSM, RSM_Frm2} delay 15 ms;
//给节点 RSM的帧 RSM_Frm2 分配PID,
//帧时隙为15ms
}
Normal_Schedule
{ //进度表名称为:Normal_Schedule
CEM_Frm1 delay 15 ms; //帧 CEM_Frm1,帧时隙15ms
LSM_Frm2 delay 15 ms; //帧 LSM_Frm2,帧时隙15ms
RSM_Frm2 delay 15 ms; //帧 RSM_Frm2,帧时隙15ms
Node_Status_Event delay 10 ms; //事件触发帧Node_Status_Event,
//帧时隙 10ms
}
MRF_schedule
{ /进度表名称为:MRF_schedule
MasterReq delay 10 ms; //主机请求帧,帧时隙 10ms
}
SRF_schedule
{ //进度表名称为:SRF_schedule
SlaveResp delay 10 ms; //从机应答帧,帧时隙 10ms
}
Collision_resolver
{ //发生冲突时需保证非事件触发帧的传输时序
//进度表名称:Collision_resolver
CEM_Frm1 delay 15 ms; //帧 CEM_Frm1,帧时隙15ms
LSM_Frm2 delay 15 ms; //帧 LSM_Frm2,帧时隙15ms
RSM_Frm2 delay 15 ms; //帧 RSM_Frm2,帧时隙15ms
RSM_Frm1 delay 10 ms; //轮询 RSM节点
//帧 RSM_Frm1,帧时隙10ms
CEM_Frm1 delay 15 ms; //帧 CEM_Frm1,帧时隙15ms
LSM_Frm2 delay 15 ms; //帧 LSM_Frm2,帧时隙15ms
RSM_Frm2 delay 15 ms; //帧 RSM_Frm2,帧时隙15ms
LSM_Frm1 delay 10 ms; //轮询 LSM节点
//帧 LSM_Frm1,帧时隙10ms
}
}
信号编码和映射
这是对数据的大小以及具体实际进行定义
一种信号对应一种编码准则
Signal_encoding_types
{ //信号编码类型:Signal_encoding_types
Dig2Bit
{ //信号编码类型名称:Dig2Bit
logical_value, 0, “off”; //逻辑值 0,代表“off”
logical_value, 1, “on”; //逻辑值 1,代表“on”
logical_value, 2, “error”; //逻辑值 2,代表“error”
logical_value, 3, “void”; //逻辑值 3,代表“void”
}
ErrorEncoding
{ //信号编码类型名称:ErrorEncoding
logical_value, 0, “OK”; //逻辑值 0,代表“OK”
logical_value, 1, “error”; //逻辑值 1,代表“error”
}
FaultStateEncoding
{ //信号编码类型名称:FaultStateEncoding
logical_value, 0, “No test result”; //逻辑值 0,代表“No test result”
logical_value, 1, “failed”; //逻辑值 1,代表“failed”
logical_value, 2, “passed”; //逻辑值 2,代表“passed”
logical_value, 3, “not used”; //逻辑值 3,代表“not used”
}
LightEncoding
{ //信号编码类型名称:LightEncoding
logical_value, 0, “Off”; //逻辑值:0,代表:“Off”
physical_value, 1, 254, 1, 100, “lux”; //物理值:1,最小值:1,
//最大值:254,缩放倍数:1,
//偏移量:100,文字信息:“lux”
logical_value, 255, “error”; //逻辑值:255,代表:“error”
}
}
Signal_representation
{ //信号表示定义
Dig2Bit: InternalLightsRequest; //应用信号编码类型为 Dig2Bit的信号
//InternalLightsRequest
ErrorEncoding: RSMerror, LSMerror; //应用信号编码类型为 ErrorEncoding 的
//信号 RSMerror,LSMerror
FaultStateEncoding: IntError; //应用信号编码类型为
//FaultStateEncoding 的信号 IntError
LightEncoding: RightIntLightsSwitch, LefttIntLightsSwitch;
//应用信号编码类型为 LightEncoding的
//信号 RightIntLightsSwitch,
//LefttIntLightsSwitch
}