征程 6E camera diag sample

地平线智能驾驶开发者發表於2024-11-05

01 功能概述

本文的 demo sample 主要描述當前 camera 相關外設診斷的當前狀態,並提供自定義實現的方法及使用說明。

1.1 軟體架構說明

本 sample 基於現已實現的 camera 診斷架構,libcam 內的外設診斷功能對外設硬體狀態進行監測,並支援將故障狀態傳送給 MCU 處理,或透過事件回撥方式通知應用處理。

若開啟診斷功能且使能診斷報告傳送時,在 libcam.so 中會引用 libdiaglib.so 中的診斷髮送 API,將診斷資訊傳送給 MCU,再由 MCU 側進行處理。

若應用透過 API 註冊了 camera 的事件回撥處理函式,則會在故障狀態變化時,透過該回撥通知到應用進行處理。

Camera 外設診斷資料通路,預設支援應用註冊的事件回撥通知,但不傳送診斷報告給 MCU,此處以 sample 形式提供,使用者可根據實際專案或應用需要,進行定製,本文提供相應的定製使用說明。

1.2 診斷功能說明

Camera 外設診斷在 libcam 內實現,預設已實現了部分 Sensor/Serdes/Poc 裝置的診斷功能,其在內部進行了診斷功能預定義,並以 diag_id 作為唯一識別索引,由診斷功能實現及實際硬體使用情況決定其值,可描述一個指定外設硬體的相應故障,關於其定義可參見: :ref:camera diag id。

此處定義的 camera 外設診斷,在 libcam 主體庫中實現了框架,具體的外設診斷則由各 Sensor/Deserial 等子庫定製實現:按主體框架的要求及外設功能安全手冊描述,定義診斷 node 並向主體框架註冊。

使用者可根據實際應用需求,進行自定義定製開發與使用:

  • 提供診斷功能的開關,預設開啟狀態,支援主動關閉診斷功能。
  • 內部有預設的診斷資訊隱射關係,可進行診斷資訊的自定義診斷資訊對映。
  • 支援配置開啟或關閉傳送與回撥功能。

1.3 程式碼位置與目錄結構

API 流程說明

以下為 camera 診斷中相關的 API 呼叫流程:

此處的 :ref:hb_cam_set_event_callback 為可選呼叫,若應用需要處理 camera 診斷事件,可在初始化完成之後透過該 API 進行回撥註冊,之後在有故障發生或恢復時會透過該回撥通知應用處理。

02 定製開發

本文中的 camera 外設診斷功能已在 libcam 庫中實現,並預設開啟編譯整合,若有相應的定製需求,可參考下文進行開發。

2.1 診斷編譯配置

該 camera 外設診斷功能由 libcam 中 Kconfig 的編譯配置選項 HB_PKG_LIBCAM_DIAG 決定是否編譯使能,其預設值為 y,整合使用,若需要關閉該功能可按下操作:

  # 在配置檔案(此處為預設,請按專案實際使用選擇)中:
  # horizon/j6/defconfig/j6e_debug_defconfig
  # 預設為y,可配置n關閉編譯整合:
  export HB_PKG_LIBCAM_DIAG=n

在關閉該診斷功能之後,src/diag 目錄中的程式碼則直接不會編譯整合到 libcam 庫中,關閉診斷功能不影響正常資料處理功能。

camera 的自恢復功能依賴診斷功能,若關閉診斷功能,則自恢復功能也將失效。

此處 libcam 中的診斷報告預設使用診斷 API 進行診斷狀態報告,因此在應用整合時若編譯報錯,需注意對該 libdiaglib 庫的引用。

LIBS += -ldiaglib

上述診斷報告的傳送,可透過配置標頭檔案 src/inc/private/cam_config.h 中的宏 CAM_CONFIG_LIBDIAG_EN 關閉:

/* #define CAM_CONFIG_LIBDIAG_EN */

註釋該宏 CAM_CONFIG_LIBDIAG_EN 的定義即可關閉診斷髮送功能,關閉後將不會傳送診斷資訊到 MCU,而由一行列印替代。

2.2 診斷資訊對映

camera 診斷內部由 diag_id 唯一定義,在報告給 MCU 或使用者時,可根據實際需要進行對映,將其轉換為 module_id/event_id 進行報告。

目前內預設有一組對映關係,詳見: :ref:診斷報告對映關係說明 。

該組預設的對映關係由 2 部分組成,使用者可根據實際需要進行修改:按診斷型別定義了 module_id 的 BASE 值,定義在 src/diag/report/report.h 內:

#define CAM_DIAG_SERDES_BASE      0xC010u
#define CAM_DIAG_SENSOR_BASE      0xC000u
#define CAM_DIAG_POC_BASE        0xC020u

若要完全修改對映的對應關係,也可以直接修改 src/diag/report/report.c 內的 cam_diag_mapping() 函式實現,目前預設為:

int32_t cam_diag_mapping(uint32_t diag_id, cam_diag_map_s *map_info, void *spec_mapping)
{
uint16_t base_id = 0;
if (spec_mapping != NULL) {
vin_info("use spec mapping function\n");
return RET_OK;
}
/* modify those mapping code if need /
*      /* user-defined mapping start /
*      /* here is default camera diag mapping: diag_id -> module_id / event_id /
      if (DIAG_DEVTYPE(diag_id) == (uint32_t)CAM_DES) {
          base_id = CAM_DIAG_SERDES_BASE;
      } else if (DIAG_DEVTYPE(diag_id) == (uint32_t)CAM_SNR) {
          base_id = CAM_DIAG_SENSOR_BASE;
      } else if (DIAG_DEVTYPE(diag_id) == (uint32_t)CAM_POC) {
          base_id = CAM_DIAG_POC_BASE;
      } else {
          vin_err("invalid devtype %d, diag_id 0x%x\n",
              DIAG_DEVTYPE(diag_id), diag_id);
          return -HBN_STATUS_CAM_NOT_SUPPORT;
      }
      //coverity[misra_c_2012_rule_10_3_violation:SUPPRESS], ## violation reason SYSSW_V_10.3.01
      map_info->module_id = base_id + DIAG_SUBTYPE(diag_id);
      //coverity[misra_c_2012_rule_10_3_violation:SUPPRESS], ## violation reason SYSSW_V_10.3.01
      map_info->event_id = DIAG_DEVINDEX(diag_id);
*      /* user-defined mapping end */
vin_info("mapping: diag_id 0x%x -> module_id 0x%04x, event_id 0x%04x\n",
diag_id, map_info->module_id, map_info->event_id);
return RET_OK;
}

此處只需要按需要重新定義 diag_id 與 module_id/event_id 的對映關係,並在上述函式中實現 該轉換即可,之後的診斷髮送與回撥則會使用轉換後的 module_id/event_id進行處理。

此處自定義並轉換的 module_id 及 event_id 在滿足專案需求的同時,還需滿 J6X FUSA 錯誤整合策略的要求,本文中的 camera 外設診斷在錯誤等級定義上都屬於 NCF 錯誤。

2.3 診斷資訊處理

預設支援診斷事件回撥通知功能,若有處理需要,應用可透過 :ref:hb_cam_set_event_callback 註冊回撥函式之後即可在診斷故障或恢復時進行相應的處理,示例如下:該回撥函式是按 port 註冊的,支援對不同通路使用不同的回撥處理函式,若通路不註冊該回撥,則不會收到處理通知。

static void camera_diag_event_callback(cam_event_t* fault_info)
{
if (fault_info == NULL) {
pr_err("** camera event cb: fault_info NULL\n");
return;
}
pr_info("** p%d %s event: module_id=0x%04x event_id=0x%04x status=%d\n",
fault_info->port, (fault_info->event_type == HB_CAM_EVENT_DIAG) ? "diag" : "unknown",
fault_info->module_id, fault_info->event_id, fault_info->status);
}
static int32_t camera_diag_event_cb_init(void)
{
int32_t ret;
uint32_t i;
if (!cam_diag_event)
return 0;
pr_info("hb_cam_set_event_callback() ...\n");
for (i = 0; i < HB_VIO_PIPELINE_MAX; i++) {
if (!vflow_pipe_isvalid(i))
continue;
ret = hb_cam_set_event_callback(i, camera_diag_event_callback);
if (ret < 0) {
pr_err("hb_cam_set_event_callback(%d) error %d\n", i, ret);
return ret;
}
}
return ret;
}

若開啟診斷髮送功能,在出現故障時,該診斷資訊會被髮送到 MCU 側,由 MCU 側進行處理,此處在傳送的資訊中已將 module_id 與 event_id 分別按 2 位元組(LSB)資訊填充在 payload 中,處理時可用。

static Std_ReturnType Call_CustomSelfFaultHandle(uint16 ModuleId, uint16 EventId, uint16 EventLevel, uint16 EventState, uint8 *Payload, uint16 PayloadLen)
{
Std_ReturnType RetVal = (Std_ReturnType)E_OK;
/* Here, the user parses the payload information */
return RetVal;
}

上為 MCU 側的處理實現示例。

03 測試使用

3.1 診斷開關

若在編譯整合時整合了診斷功能,則預設該診斷功能處於開啟狀態,若想在執行時也可以主動關閉診斷功能,有以下方式可關閉:

  • 配置方式
  {
    "global": {
      "diag_disable": 1
    }
  }
  • 配置環境變數方式
  {
    "global": {
      "env": {
        "CAM_DIAG_DISABLE": "1"
      }
    }
  }
  • 直接環境變數方式
  # 執行前執行,診斷功能: 0-預設開,1-關
  export CAM_DIAG_DISABLE=1

上述方式都可以關閉診斷功能,其中配置方式多用於整合固化,環境變數方式多用於臨時除錯,請根據需要使用。

3.2 診斷報告與回撥開關

在已開啟診斷功能的前提下,對診斷報告的處理,支援報告給 MCU 與回撥通知應用,預設為不報 MCU 但通知回撥,若想修改該開關,有以下方式:

  • 配置環境變數方式
  {
    "global": {
      "env": {
        "CAM_DIAG_REPORT": "1"
      }
    }
  }
  • 直接環境變數方式
  # 執行前執行,選擇診斷報告模式: 數字,預設0-不傳送可回撥,1-傳送可回撥,2-不傳送不可回撥,3-傳送不可回撥
  export CAM_DIAG_REPORT=1  

3.3 測試示例

此處以 1V 測試場景 1V_OVX8B_RX0 示例,使用 E 引數開啟回撥測試。

 # 根據需要開關相應的報告模式,如 1-傳送可回撥:
  export CAM_DIAG_REPORT=1
  # 之後執行測試case:
  /app/sample/S83_Sample/S83E04_Module/camera_sample/scripts/camera_sample.sh matrix 1V_OVX8B_RX0 E r100
  # 或直接命令列:
  /app/sample/S83_Sample/S83E04_Module/camera_sample/bin/camera_sample -c /app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/hb_j6dev.json -v /app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/vpm_config.json -E -r 100

在上述 case 執行過程中,可操作暫存器進行錯誤注入及清除,此處僅為一種方式的示例,更多錯誤注入方式請參考外設手冊:

# 錯誤注入:
  i2ctransfer -y -f 0 w3@0x40 0x00 0x29 0x10
  # 延時:
  sleep 1
  # 錯誤恢復:
  i2ctransfer -y -f 0 w3@0x40 0x00 0x29 0x08

測試有 log 如下,可看到有幾個診斷事件的錯誤及恢復資訊報出:

  [camera_sample]:cam_cfg_file = /app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/hb_j6dev.json
  [camera_sample]:vio_cfg_file = /app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/vpm_config.json
  [camera_sample]:vflow_type = 0x1000000
  [camera_sample]:cam_diag_event = 1
  [camera_sample]:run_time = 100
  [camera_sample]:camera_sample start
  [camera_sample]:hb_vio_init(/app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/vpm_config.json) ...
  [camera_sample]:hb_cam_init(0, /app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/hb_j6dev.json) ...
  [camera_sample]: auto get 1 pipe mask 0x1 good 0xffffffff
  [camera_sample]:hb_cam_set_event_callback() ...
  [camera_sample]:hb_vio_start_pipeline(0) ...
  [camera_sample]:thread cam0:CIM_RAW work
  [camera_sample]:camera flow0:t24-CIM_RAW frame 25: fps 25.00
  [camera_sample]:camera flow0:t24-CIM_RAW frame 50: fps 25.00
  [camera_sample]:camera flow0:t24-CIM_RAW frame 75: fps 25.00
  [camera_sample]:** p0 diag event: module_id=0xc015 event_id=0x0001 status=1
  [camera_sample]:** p0 diag event: module_id=0xc019 event_id=0x000f status=1
  [camera_sample]:** p0 diag event: module_id=0xc012 event_id=0x0001 status=1
  [camera_sample]:** p0 diag event: module_id=0xc011 event_id=0x0001 status=1
  [camera_sample]:camera flow0:t24-CIM_RAW frame 99: fps 24.00
  [camera_sample]:** p0 diag event: module_id=0xc015 event_id=0x0001 status=0
  [camera_sample]:** p0 diag event: module_id=0xc019 event_id=0x000f status=0
  [camera_sample]:** p0 diag event: module_id=0xc012 event_id=0x0001 status=0
  [camera_sample]:** p0 diag event: module_id=0xc011 event_id=0x0001 status=0
  [camera_sample]:camera flow0:t24-CIM_RAW frame 123: fps 24.00
  [camera_sample]:camera flow0:t24-CIM_RAW frame 148: fps 25.00
  [camera_sample]:camera flow0:t24-CIM_RAW frame 173: fps 25.00
  [camera_sample]:camera flow0:t24-CIM_RAW frame 198: fps 25.00
  ...

同時 logcat 中也有相關的診斷與報告等資訊(此處僅為示例展示,若中間有 log 列印資訊變化不一定嚴格對應):

  I/    (234391): [158931.593750][camera_diag_gpioe]:[gpioe_epoll_thread][285] egpio 479 status is 0
  I/    (234391): [158931.593750][camera_diag_mon]:[mon_report_status_changed][239] status_changed diag_id 0x10f0ff, status 1,gpio 479, value 0x0
  I/    (234391): [158932.156250][vin.c]:[vin_entity_put_buf][476]pipe 0, vin put buf vin hw id = 0
  I/    (234391): [158932.187500][vin.c]:[vin_entity_put_buf][476]pipe 0, vin put buf vin hw id = 0
  I/    (234391): [158932.234375][vin.c]:[vin_entity_put_buf][476]pipe 0, vin put buf vin hw id = 0
  I/    (234391): [158931.703125][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101055, status 32,bus 0, dev 0x29, reg 0x45, value 0x1
  I/    (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101055 -> module_id 0xc015, event_id 0x0001
  I/    (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc015, event_id: 0x0001, status: 1 send call
  W/    (234391): [A][time_3 :158931 s, 691 ms] [U] stl_service Rcv_Occur_msg: 49173-1-NCF-Occur (65535, 65535, 65535) 
  I/    (234391): [158931.703125][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x10f099, status 512,bus 0, dev 0x29, reg 0x2a, value 0xa
  I/    (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x10f099 -> module_id 0xc019, event_id 0x000f
  I/    (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc019, event_id: 0x000f, status: 1 send call
  W/    (234391): [A][time_3 :158931 s, 691 ms] [U] stl_service Rcv_Occur_msg: 49177-15-NCF-Occur (65535, 65535, 65535) 
  I/    (234391): [158931.703125][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101022, status 4,bus 0, dev 0x29, reg 0x2c, value 0x1
  I/    (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101022 -> module_id 0xc012, event_id 0x0001
  I/    (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc012, event_id: 0x0001, status: 1 send call
  W/    (234391): [A][time_3 :158931 s, 693 ms] [U] stl_service Rcv_Occur_msg: 49170-1-NCF-Occur (65535, 65535, 65535) 
  I/    (234391): [158931.703125][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101011, status 2,bus 0, dev 0x29, reg 0x26, value 0x1
  I/    (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101011 -> module_id 0xc011, event_id 0x0001
  I/    (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc011, event_id: 0x0001, status: 1 send call
  W/    (234391): [A][time_3 :158931 s, 694 ms] [U] stl_service Rcv_Occur_msg: 49169-1-NCF-Occur (65535, 65535, 65535) 
  I/    (234391): [158931.703125][camera_diag_gpioe]:[gpioe_epoll_thread][285] egpio 479 status is 0
  ...
  I/    (234391): [158940.906250][camera_diag_gpioe]:[gpioe_epoll_thread][285] egpio 479 status is 1
  I/    (234391): [158940.906250][camera_diag_mon]:[mon_report_status_changed][239] status_changed diag_id 0x10f0ff, status 0,gpio 479, value 0x1
  I/    (234391): [158940.906250][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101055, status 0,bus 0, dev 0x29, reg 0x45, value 0x0
  I/    (234391): [158940.906250][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101055 -> module_id 0xc015, event_id 0x0001
  I/    (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc015, event_id: 0x0001, status: 0 send call
  W/    (234391): [A][time_7 :158940 s, 901 ms] [U] stl_service Rcv_Fixed_msg: 49173-1-NCF-Fixed (65535, 65535, 65535) 
  I/    (234391): [158940.906250][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x10f099 -> module_id 0xc019, event_id 0x000f
  I/    (234391): [158940.906250][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x10f099, status 0,bus 0, dev 0x29, reg 0x2a, value 0x2
  I/    (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc019, event_id: 0x000f, status: 0 send call
  W/    (234391): [A][time_7 :158940 s, 901 ms] [U] stl_service Rcv_Fixed_msg: 49177-15-NCF-Fixed (65535, 65535, 65535) 
  I/    (234391): [158940.906250][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101022 -> module_id 0xc012, event_id 0x0001
  I/    (234391): [158940.906250][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101022, status 0,bus 0, dev 0x29, reg 0x2c, value 0x0
  I/    (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc012, event_id: 0x0001, status: 0 send call
  W/    (234391): [A][time_7 :158940 s, 901 ms] [U] stl_service Rcv_Fixed_msg: 49170-1-NCF-Fixed (65535, 65535, 65535) 
  I/    (234391): [158940.906250][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101011, status 0,bus 0, dev 0x29, reg 0x26, value 0x0
  I/    (234391): [158940.906250][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101011 -> module_id 0xc011, event_id 0x0001
  I/    (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc011, event_id: 0x0001, status: 0 send call
  W/    (234391): [A][time_7 :158940 s, 902 ms] [U] stl_service Rcv_Fixed_msg: 49169-1-NCF-Fixed (65535, 65535, 65535) 
  ...

並在 dmesg 中收到相應的診斷資訊(此處僅為示例展示,若中間有 log 列印資訊變化不一定嚴格對應):

  [159372.279022] [A][time_2 :159371 s, 700 ms] [K] Rcv_Occur_msg: 49173-1-NCF-Occur (65535, 65535, 65535)payload(21 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)
  [159372.279085] [A][time_6 :159371 s, 700 ms] [U] Ack from Rcore recv_Occur_msg: 49173-1-NCF-Occur (65535, 65535, 65535)
  [159372.279099] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49173, eventid:1
  [159372.279834] [A][time_2 :159371 s, 701 ms] [K] Rcv_Occur_msg: 49177-15-NCF-Occur (65535, 65535, 65535)payload(25 192 15 0 0 0 0 0 0 0 0 0 0 0 0 0)
  [159372.279889] [A][time_6 :159371 s, 701 ms] [U] Ack from Rcore recv_Occur_msg: 49177-15-NCF-Occur (65535, 65535, 65535)
  [159372.279899] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49177, eventid:15
  [159372.281743] [A][time_2 :159371 s, 703 ms] [K] Rcv_Occur_msg: 49170-1-NCF-Occur (65535, 65535, 65535)payload(18 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)
  [159372.281800] [A][time_6 :159371 s, 703 ms] [U] Ack from Rcore recv_Occur_msg: 49170-1-NCF-Occur (65535, 65535, 65535)
  [159372.281811] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49170, eventid:1
  [159372.282172] [A][time_2 :159371 s, 703 ms] [K] Rcv_Occur_msg: 49169-1-NCF-Occur (65535, 65535, 65535)payload(17 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)
  [159372.282235] [A][time_6 :159371 s, 704 ms] [U] Ack from Rcore recv_Occur_msg: 49169-1-NCF-Occur (65535, 65535, 65535)
  [159372.282247] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49169, eventid:1
  ...
  [159373.286246] [A][time_5 :159372 s, 708 ms] [K] Rcv_Fixed_msg: 49173-1-NCF-Fixed (65535, 65535, 65535)payload(21 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)
  [159373.286322] [A][time_10 :159372 s, 708 ms] [U] Ack from Rcore recv_Fixed_msg: 49173-1-NCF-Fixed (65535, 65535, 65535)
  [159373.286336] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49173, eventid:1
  [159373.286689] [A][time_5 :159372 s, 708 ms] [K] Rcv_Fixed_msg: 49177-15-NCF-Fixed (65535, 65535, 65535)payload(25 192 15 0 0 0 0 0 0 0 0 0 0 0 0 0)
  [159373.286748] [A][time_10 :159372 s, 708 ms] [U] Ack from Rcore recv_Fixed_msg: 49177-15-NCF-Fixed (65535, 65535, 65535)
  [159373.286758] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49177, eventid:15
  [159373.286910] [A][time_5 :159372 s, 708 ms] [K] Rcv_Fixed_msg: 49170-1-NCF-Fixed (65535, 65535, 65535)payload(18 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)
  [159373.286971] [A][time_10 :159372 s, 708 ms] [U] Ack from Rcore recv_Fixed_msg: 49170-1-NCF-Fixed (65535, 65535, 65535)
  [159373.286982] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49170, eventid:1
  [159373.287136] [A][time_5 :159372 s, 708 ms] [K] Rcv_Fixed_msg: 49169-1-NCF-Fixed (65535, 65535, 65535)payload(17 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)
  [159373.287190] [A][time_10 :159372 s, 708 ms] [U] Ack from Rcore recv_Fixed_msg: 49169-1-NCF-Fixed (65535, 65535, 65535)
  [159373.287202] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49169, eventid:1
  ....

同時 MCU 側會收到相應的診斷報告資訊(此處僅為示例展示,若中間有log列印資訊變化不一定嚴格對應):

  [0159375.392403 0][M][time_5: 159371 s, 700 ms] Recv user ncf event: 49173-1-Occur (65535, 65535, 65535), Payload(21-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)
  [0159375.394013 0][M][time_5: 159371 s, 701 ms] Recv user ncf event: 49177-15-Occur (65535, 65535, 65535), Payload(25-192-15-00 00-00-00-00 00-00-00-00 00-00-00-00)
  [0159375.395815 0][M][time_5: 159371 s, 703 ms] Recv user ncf event: 49170-1-Occur (65535, 65535, 65535), Payload(18-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)
  [0159375.412514 0][M][time_5: 159371 s, 703 ms] Recv user ncf event: 49169-1-Occur (65535, 65535, 65535), Payload(17-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)
  ...
  [0159376.398015 0][M][time_9: 159372 s, 708 ms] Recv user ncf event: 49173-1-Fixed (65535, 65535, 65535), Payload(21-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)
  [0159376.399626 0][M][time_9: 159372 s, 708 ms] Recv user ncf event: 49177-15-Fixed (65535, 65535, 65535), Payload(25-192-15-00 00-00-00-00 00-00-00-00 00-00-00-00)
  [0159376.401427 0][M][time_9: 159372 s, 708 ms] Recv user ncf event: 49170-1-Fixed (65535, 65535, 65535), Payload(18-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)
  [0159376.418117 0][M][time_9: 159372 s, 708 ms] Recv user ncf event: 49169-1-Fixed (65535, 65535, 65535), Payload(17-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)
  ...

3.4 注意事項

上述示例僅為單路接入使用在特定硬體上的使用及注入測試,且在診斷功能已實現的前提下進行的測試示例。

對於自定義硬體及場景,則需根據實際硬體進行相應的配置,並適配相應的測試注入命令進行功能驗證。

相關文章