【AUTOSAR】Bootloader说明(五)---- UDS网络层函数

    1. 网络层设计

网络层包括文件15765.c。

15765.c包括遵循15765-2协议的接口,实现诊断请求消息解析,诊断响应消息的封装及发送。

本文档仅简述与UDS应用层接口的几个函数,具体设计细节参考#网络层设计

初始化nt_init()

函数原型

nt_status_t nt_init (void)

函数作用

初始化应用层诊断命令接收缓冲区。

函数参数

函数说明

系统复位后,使用网络层进行数据传输前调用(仅一次)。

26  函数nt_init ()说明

CAN消息接收接口nt_received_frame()

函数原型

BOOL nt_received_frame(Uint16 frame_length, const Uint16 *frame_data)

函数作用

接收并分析诊断命令消息。当接收到有效而完整的诊断消息后,通知应用层处理。

函数参数

frame_length:收到的CAN消息长度。

*frame_data::CAN消息数据存储的地址指针。

函数说明

当nt_pre_process()接收到有效而完整的诊断消息时调用。

27  函数nt_received_frame ()说明

CAN消息发送接口nt_tx_msg()

函数原型

nt_status_t nt_transmit (Uint16 length)

函数作用

判断当前网络层状态是否允许发送数据。若允许,设置相应的标志位及网络层状态(网络层状态指发送FF,发送SF,等待CF等)。

函数参数

length:UDS应用层要发送的数据长度。

函数说明

网路层缓冲区装完有效数据后。

28  函数nt_tx_msg ()说明

网络层任务接口nt_post_process()

函数原型

void nt_post_process (void)

函数作用

根据网络层的状态进行相应的操作;如:网络层要发送单帧或多帧,则nt_pre_process()将UDS数据拷贝到nt_buffer[],并设置相应的标志位。

函数参数

length:UDS应用层要发送的数据长度。

函数说明

被nt_pre_process() 调用。

29  函数nt_post_process()说明

网络层与boot-loader接口

包括文件hal_nt_interface.c。此文件中主要包括因boot-loader和应用程序CAN驱动中不同而导致与网络层与CAN驱动接口不同的部分。

Hal_nt_interface.c实现从CAN模块邮箱中接收CAN消息并通知网络层处理,及将网络层要发送的CAN消息发送出去。

网络层初始化nt_interface_init()

函数原型

void nt_interface_init(void)

函数作用

显式的将网络层全局变量初始化。如:uds_rx_dlc,uds_rx_data[],uds_tx_data[]。

函数参数

函数说明

和nt_post_process()一样,被uds_prog_main(调用)。

30  函数nt_interface_init ()说明

网络层接口主函数nt_pre_process()

函数原型

void nt_pre_process (void)

函数作用

从CAN模块邮箱接收CAN消息(存储到uds_rx_data[8]中)并解析(调用nt_received_frame())。当接收到有效的诊断消息时(有效指CAN ID正确并符合15765-2规范),nt_received_frame()将剥离出诊断消息数据存储在缓冲区(nt_buffer[256+1](TBD))中,并调用诊断应用层诊断命令处理接口(uds_request_handler())处理。

函数参数

函数说明

和nt_pre_process()一样,被uds_prog_main(调用)。

31  函数nt_pre_process ()说明

网络层CAN消息发送nt_can_msg_send()

函数原型

void nt_can_msg_send(void)

函数作用

将网络层发送缓冲区uds_tx_data[8]中的数据发送出去。

函数参数

函数说明

被nt_pre_process_send()调用,nt_pre_process_send()被nt_pre_process()调用。

32  函数nt_can_msg_send ()说明

诊断应用层设计

如前所述,为了在boot-loader和应用程序之间尽可能的复用函数,boot-loader诊断应用层分为以下几个部分:

uds_refresh_main.c:包括了刷新模式下支持的UDS诊断服务函数

uds_status.c:包括一些控制诊断模式及状态相关函数

uds_utlis.c: 其他功能函数

诊断请求服务函数

文件uds_refresh_main.c。

UDS诊断请求处理接口uds_cmd_process()

函数原型

void uds_cmd_process(Uint16 length)

函数作用

处理网络层解析后的UDS请求,根据安全状态及诊断模式在uds_cmd[]中查找相应得诊断请求服务。

函数参数

length:网络层解析后的UDS诊断请求数据长度

函数说明

被nt_received_frame()调用。参考4.8.24.9.2

33  函数uds_cmd_process()说明

诊断模式控制uds_service_10_process()

函数原型

void uds_service_10_process(void)

函数作用

DiagnosticSessionControl请求服务程序,处理诊断模式切换请求

函数参数

函数说明

被uds_cmd_process()调用。

34  函数uds_service_10_process ()说明

ECU复位uds_service_11_process ()

函数原型

void uds_service_11_process (void)

函数作用

ECUReset请求服务程序,处理ECU复位请求

函数参数

函数说明

被uds_cmd_process()调用。

35  函数uds_service_11_process ()说明

安全验证uds_service_27_process ()

函数原型

void uds_service_27_process (void)

函数作用

SecurityAccess请求服务程序,处理安全验证请求,设置诊断安全状态

函数参数

函数说明

被uds_cmd_process()调用。

36  函数uds_service_27_process ()说明

远程控制uds_service_31_process ()

函数原型

void uds_service_31_process (void)

函数作用

RoutineControl请求服务程序,处理远程控制请求。

将根据诊断请求的程序标识符(RountineID)在LocalRoutines[]中查找相关的程序并执行。

函数参数

函数说明

被uds_cmd_process()调用。

37  函数uds_service_31_process ()说明

请求下载uds_service_34_process ()

函数原型

void uds_service_34_process (void)

函数作用

RequestDownload请求服务程序,处理下载请求。

将根据诊断请求中的传输开始地址MTA0及内存块大小MemorySize判断该请求是否合法。

函数参数

函数说明

被uds_cmd_process()调用。

38  函数uds_service_34_process ()说明

数据传输uds_service_36_process ()

函数原型

void uds_ service_36_process (void)

函数作用

TransferData请求服务程序,数据传输。

该命令在MCU及外部工具之间进行数据传输。

如果是Download模式,则从外部工具向MCU传数据。

如果是Upload模式,则从MCU向外部工具传数据。

函数参数

函数说明

被uds_cmd_process()调用。

39  函数uds_service_36_process ()说明

请求传输退出uds_ service_37_process ()

函数原型

void uds_ service_37_process (void)

函数作用

RequestTransferExit请求服务程序,请求退出数据传输。

函数参数

函数说明

被uds_cmd_process()调用。

40  函数uds_service_37_process ()说明

请求传输退出uds_ service_3E_process ()

函数原型

void uds_ service_3E_process (void)

函数作用

TesterPresent请求服务程序

函数参数

函数说明

被uds_cmd_process()调用。

41  函数uds_service_3E_process ()说明

诊断状态控制

文件uds_status.c。

诊断安全状态机

函数原型

void uds_secure_sm(void)

函数作用

根据外部诊断工具连接情况切换诊断安全状态。

函数参数

42  函数uds_secure_sm ()说明

诊断模式状态机

函数原型

void uds_session_sm (void)

函数作用

根据外部诊断工具连接情况切换诊断模式。

函数参数

函数说明

被uds_refresh_status ()调用。

43  函数uds_session_sm ()说明

诊断状态刷新

函数原型

void uds_refresh_status (void)

函数作用

刷新安全状态及模式

函数参数

函数说明

被uds_prog_main()调用。

44  函数uds_refresh_status ()说明

进入刷新模式安全检查uds_can_enter_bootblock ()

函数原型

BOOL uds_can_enter_bblk(void)

函数作用

根据系统当前安全情况判断是否可以进入刷新模式

函数参数

函数说明

被应用程序main()调用,在收到诊断模式请求进入刷新模式之后调用。

45  函数uds_can_enter_bblk ()说明

其他功能函数库

文件uds_utlis.c。

        1. UDS应用层发送数据uds_transmit_response_msg

函数原型

void uds_transmit_response_msg (const Uint16 * uds_data, Uint16 uds_data_length))

函数作用

UDS应用层发送数据接口

函数参数

uds_data:指向UDS应用层要发送的数据的缓冲区。

uds_data_length:UDS应用层要发送的数据长度。

函数说明

被各诊断服务请求处理函数调用。

46  函数uds_tx_msg ()说明

UDS应用层接收数据uds_read_request_msg()

函数原型

Uint16 uds_read_request_msg (Uint16 default_data)

函数作用

UDS应用层接收数据接口

函数参数

default_data:缺省返回数据

函数说明

用于UDS应用层在网络层解析后的诊断请求数据缓冲区抽取数据。调用一次抽取一个字节,当uds_rx_index>=uds_rx_length时,返回缺省数据。

47  函数uds_rx _msg()说明

UDS负响应uds_negative_response()

函数原型

void uds_negative_response (Uint16 Service, Uint16 ResponseCode)

函数作用

UDS应用层接收数据接口

函数参数

Service:负响应服务ID。

ResponseCode: 错误码。

函数说明

由于UDS负响应消息格式一样,所以用这个接口来统一发送负响应。

48  函数uds_negative_response ()说明

UDS无响应消息uds_no_response()

函数原型

void uds_no_response(void)

函数作用

UDS无响应消息时的动作:设置网络层状态。

函数参数

函数说明

UDS无响应消息:

清除网络层缓冲区被应用层锁定标志

设置网络层缓冲区被网络层锁定标志

49  函数uds_no_response ()说明

    1. Flash操作
      1. 擦除flash_erase()

TI DSP28xx的FLASH擦除按扇区擦除。

扇区擦除大约会耗时5秒,所以在进行FLASH擦除的时候定时器中断服务应完成看门狗服务。擦除函数将返回擦除结果。

由于刷新代码在RAM中运行,boot-loader可以刷新自己所在的FLASH扇区。

本函数用宏实现调用TI FLASH驱动库。

编程flash_program()

TI  DSP28xx的FLASH编程按字(两个字节)编程:要编程的FLASH地址及数据指针传递给FLASH API的编程函数。

编程速度大约是1000字/100毫秒,所以在进行FLASH编程的时候定时器中断服务应完成看门狗服务。

由于编程地址自增长,待编程的数据必须是连续的块。

本函数用宏实现调用TI FLASH驱动库。

Toggle测试flash_toggle_test()

本函数测试FLASH模块的时钟(PLL及FLASH模块时钟)是否正常配置:当执行此函数时,用户指定的I/O口上应输出方波,如果该方波频率不是10KHz(TBD),则FLASH不能进行编程(可能毁坏FLASH)。

本函数将调用TI FLASH驱动库函数:

void Flash28XX_ToggleTest(volatile Uint32 *ToggleReg, Uint32 Mask // Pin Mask)

本函数运行时不返回。

在调用此函数时,禁止DSP中断,故将导致DSP硬件狗复位,时间(TBD)。

本函数可通过UDS诊断命令RoutineControl($31)请求执行。

本函数通过调用TI FLASH驱动库Flash28XX_ToggleTest(a,b)实现。

仅开发阶段用此函数来测试FLASH模块时钟配置。

函数原型

void flash_toggle_test(void)

函数作用

FLASH Toggle Test

函数参数

函数说明

Flash28XX_ToggleTest()的参数在本函数里设置(TBD)

50 函数bblk_flash_toggle_test()说明

恢复flash_depletion_recovery()

如果在进行FLASH操作时出现电压低或掉电等情况,可能出现FLASH损坏的情况。

TI FLASH驱动库函数Flash2808_DepRecover ()支持恢复FLASH(时间不确定,结果也不确定)。

本函数通过调用TI FLASH驱动库函数Flash28XX_DepRecover ()实现。

本函数可通过UDS诊断命令RoutineControl($31)请求执行。

函数原型

bool flash_depletion_recovery(void)

函数作用

FLASH Toggle Test

函数参数

函数说明

51  函数flash_depletion_recovery()说明

获取FLASH驱动版本obtain_flash_api_version()

本函数返回当前使用的TI FLASH API库的版本号。

本函数通过调用TI FLASH驱动库函数Flash2808_APIVersion()实现。

本函数可通过UDS诊断命令RoutineControl($31)请求执行。

函数原型

Uint16 flash_obtain_flash_api_version (void)

函数作用

FLASH Toggle Test

函数参数

函数说明

你可能感兴趣的:(单片机,linux,AUTOSAR,嵌入式硬件,汽车)