昨天写到ECU Reset服务,今天继续看了UDS模块的代码实现,
1.CC服务,即communication control; 主要实现对服务器通信api的控制。 设计有三个参数分别是 subfunciton, communication Type, control_flag, subfunction指示对通信方式的控制类型:使能TX和RX,禁止TX和RX,禁止TX使能RX,禁止RX使能TX。 communication Type表示哪种类型的通信。 controlflag表示函数的调用方式。对控制的实现,在应用层上进行,比如用标志位现在TX和RX,底层应该是不动的。
2.RDBID,ReadDataByID, DID的属性有:ID标识,数据长度,读安全等级,写安全等级, 储存地址。 对DID读操作需要注意的是,指向的速度要快,所以分成服务请求和服务执行两部分,前者将DID所表示的数据移到访问速度快的RAM中,后者执行读取过程,并返回应答。
3.WDBID,同理,该服务的对象也是DID的数据结构。其中安全等级稍高一些。符合安全等级的情况下,获得客户端的数据,写入DID所指定的地址就可以。一些DID数据,可以先对比校验,是否合理。
4.CDTCS 服务,ClearDTC service,清除DTC的内容应包含:某组的DTC故障,DTC快照,DTC扩展信息,该DTC所用的标志位,计数器等。如果服务端有DTC,存储在RAM和EEPROM中,那么该服务应该清除其在RAM的DTC,对于EEPROM的DTC,应根据数据保存的策略进行清除。
5.RDTC服务, ReadDTC,该服务有太多的子功能,我只做5项,分别是根据状态掩码读取DTC数量,根据状态掩码读取DTC码,根据DTC码读取DTC快照,根据DTC码读取DTC扩展数据,读取所支持的DTC码。 主要是故障自检测过程中,对于DTC数据的操作。如记录,快照记录,计数器等。这又是一大串策流程。