笔者最近接触一个UDS的项目,现针对UDS中遇到的问题进行总结。
10服务是UDS中的会话切换。由于之前做的BOOTLOADER比较多,现在算是重点放到了UDS诊断这一块。
BOOT中 10服务分为 1.默认会话;2.刷新会话;3.扩展会话。
APP 中只有 01.默认会话和扩展会话。当诊断仪发送 02 10 02时回复78等待。重启控制器进入BOOT模式。
uds_service_10 (uint8 msg_buf[], uint16 msg_dlc)
{
uint8 subfunction;
uint8 rsp_buf[8];
subfunction = UDS_GET_SUB_FUNCTION (msg_buf[1]);
rsp_buf[0] = USD_GET_POSITIVE_RSP(SID_10);
rsp_buf[1] = subfunction;
rsp_buf[2] = (uint8)(P2_SERVER >> 8);
rsp_buf[3] = (uint8)(P2_SERVER & 0x00ff);
rsp_buf[4] = (uint8)(P2X_SERVER >> 8);
rsp_buf[5] = (uint8)(P2X_SERVER & 0x00ff);
switch (subfunction)
{
case UDS_SESSION_STD:
curr_sa = UDS_SA_NON;
uds_session = (uds_session_t)subfunction;
uds_positive_rsp (rsp_buf, 6);
break;
case UDS_SESSION_PROG:
uds_negative_rsp (SID_10,0x78);
EEPRM_CLEAR_PROGFlg();
reset();
break;
case UDS_SESSION_EXT:
curr_sa = UDS_SA_NON;
uds_session = (uds_session_t)subfunction;
uds_positive_rsp (rsp_buf, 6);
uds_timer_start (UDS_TIMER_S3server);
break;
default:
uds_negative_rsp (SID_10,0x12);
break;
}
}