① 一种是用户不知道新增从节点的初始NAD,因此,必须以“广播”的方式寻找所有的从节点并分配有效的NAD(“广播”指的是给网络中的所有从节点发送请求,它有一个专用的NAD为0x7F)。但如果直接这样做,会导致所有的从节点获得同一个NAD,这显然是不允许的。为了避免这个情况,可以加入限制条件。
② 另一种是用户知道新增节点的初始NAD,但其和LIN网络中已有从节点的NAD重复了。如果用户只按照原始NAD分配新的NAD,则会导致两个从节点的NAD都被修改。因此,必须加入限制条件。
当从节点获得有条件分配NAD的请求后,将根据下面的步骤判断是否要修改NAD:
① 根据ID读取从节点的相关信息。
② 根据Byte提取相关信息中一个8位数据,例如Byte=1,则提取D1。
③ 与Invert进行异或运算。
④ 与Mask进行与运算。
⑤ 如果结果为0,则修改NAD。
例如:本产品被新增到一个LIN网络中,初始NAD为0x06,但网络中已有了一个NAD为0x06的从节点。于是,用户可以利用本产品的Function ID,假设为0x0000,分配新的NAD为0x08。这里假设已存在的从节点的Function ID不为0x0000。这样,只有新增节点的NAD会被修改,而已存在从节点的NAD维持为0x06不变。
① 第一部分为初始化,在每次重新上电后,程序都会首先读取Flash中的数据,若0x8000中的数据为0x78,则判断产品在出厂后执行过保存配置的功能。所以程序会将存储在Flash中的NAD和帧ID读出来,作为当前的NAD和帧ID。接着是初始化LIN模块,包括设置与LIN通信相关的定时器和UART等外设,设置从节点的各个参数、波特率等。
② 第二部分则放在定时器中断里面,在每次中断时进行节点配置、数据的发送和接收。首先是根据帧ID判断有无节点配置任务,若有则根据SID执行各种节点配置任务;接着根据收到的数据帧内容控制车窗的自动上升和自动下降;最后将车窗信息,包括电枢电流、车窗位置等发给主节点。
4 LIN通信的测试结果
本测试借助Kvaser公司出品的LIN通信测试工具Leaf Professional LIN及其配套软件CANLab完成。测试时测试工具设置为主节点,TLE9832单片机设置为从节点,比特率设置为19 200 bps。初始NAD设置为0x06,初始帧ID为无条件帧0x00、0x01和诊断配置帧0x3C、0x3D,SupplierID和Function ID都为0x0000。