CYW20719之debug 一

CYW20719的debug可以分為兩種:UART調試和Arm Debug Port(SWD)調試

一.UART調試

在wice藍牙晶片中通常有兩種UART:外設UART (PUART)和HCI UART。

外圍UART (PUART)

外設UART (PUART)用於應用程序發送/接收任何UART數據。在CYW920819上,這個外設UART (PUART)通過USB-UART橋接到您的PC上。

HCI UART

HCI UART有四個主要用途:

  1. 發送/接收WICED HCI消息
  2. 鏡像HCI命令到PC
  3. 下載固件到Controller Stack進行編程
  4. 連接Controller Stack與遠行Host Stack的PC或者MCU(如: PSoC 6 + CYW43012中看到這一點)

通常有6種類型的數據通過這兩個uart傳輸:

  1. Raw data -應用程序發送/接收到PC任何格式的數據
  2. Debug Trace-從應用程序調試信息
  3. WiCED HCI Msg- PC和藍牙應用程序之間用Cypress WICED HCI格式打包的數據包
  4. HCI Spy-在支持WICED系列的晶片中HCI的數據包的鏡像
  5. HCI命令-在PC或MCU (當晶片處於Controller模式時)上運行的Host stack與controller之間的HCI命令
  6. 固件-從PC下載的固件時,通過HCI格式化後的固件數據包
整體框圖如下:


調試Trace

在本文中,我們一般使用API WICED_BT_TRACE來列印調試消息,以純文本發送給PUART。事實上,您可以以兩種格式列印消息(純文本或WICED HCI),可以把列印信息輸出三個出口中的其中一個(PUART, HCI UART或NONE)。當調用函數wiced_set_debug_uart()時,參數wiced_debug_uart_types_t指定目標UART和格式的組合。

注意,有些組合是無效的。例如,您不能列印WICED HCI消息PUART。您應該小心使用枚舉名稱,因為它們可能有點令人困惑。

注意,這個配置結構只針對WICED_BT_TRACE消息。其他那人機交互使用不同的機制發送/接收消息,我們將在下文中討論。通常你會想當對WICED HCI消息使用HCI UART時,向PUART發送WICED_BT_TRACE消息,正如您將看到的。

WICED HCI

WICED HCI是一種基於包的格式,用於PC應用程序與WICED藍牙設備中的應用程序之間的交互。WICED HCI數據包有3個標準欄位,外加一個可選的payload字節數。包看起來像這樣:

  • 0x19 -表示WICED HCI數據包的初始字節
  • 2字節的小端操作碼,由1字節的控制組(即組碼)和1字節的子命令(即命令碼)組成
  • 額外字節的2字節小端長度
  • 負載的額外字節數(可選)

Control Group是預定義的事務類別列表之一,包括Device=0x00, BLE=0x01, GATT=0x02等。這些組在hci_control_api.h中定義。可以在wiced_btsdk/dev-kit/btsdk-include中找到。每個Control Group都有一個或多個可選的子命令。例如,設備控制組有子命令Reset=0x01, Trace Enable=0x02等。

控制組加上子命令被稱為“命令”或“操作碼”,是一個16位的數字。例如:Device Reset = 0x0001。在實際的數據包中,操作碼以小端序表示。例如:Device Reset = 19 01 00 00 00。

傳輸配置

要發送和接收WICEDHCI消息,您需要為HCI UART配置傳輸系統。要做到這一點,你需要做以下事情:

  1. 包含wiced_transport.h和hci_control_api.h。
  2. 聲明一個指向wiced_transport_buffer_pool_t的指針。
  3. 創建一個wiced_transport_cfg_t類型的全局結構,其中包含HCI UART配置,包括接收和傳輸緩衝區的大小,一個指向狀態處理程序函數的指針,一個指向RX處理程序函數的指針和一個指向TX完整回調函數的指針(如果需要)。
  4. 調用wiced_transport_init(使用指向配置結構的指針)。
  5. 調用wiced_transport_create_buffer_pool創建供傳輸系統使用的緩衝區。
  6. 創建HCI RX處理函數和TX處理函數(如果需要)。

下面的示例顯示了上面的6個點。

包括頭文件

# include“wiced_transport.h”

# include“hci_control_api.h”



傳輸緩衝池指針

像這樣添加一個指向wiced_transport_buffer_pool_t的全局指針:

靜態wiced_transport_buffer_pool_t* transport_pool = NULL;

Transport Configuration Structure的配置

HCI的傳輸配置結構示例如下所示。“HCI_UART_DEFAULT_BAUD”的值為3000000。在這個例子中,沒有實現HCI TX處理程序,所以它被指定為NULL。


Transport Init and Buffer Pools

一旦設置好結構,就必須初始化傳輸並創建緩衝池。這通常在application_start的正上方完成。

/*初始化傳輸配置

wiced_transport_init (&transport_cfg);

/*初始化傳輸緩衝池

transport_pool = wiced_transport_create_buffer_pool (TRANS_UART_BUFFER_SIZE,TRANS_UART_BUFFER_COUNT);

RX處理程序

應用程序負責處理髮送到應用程序的HCI命令。當一個新命令被發送時,你的RX處理函數將被調用。這個函數應該只是確保向它發送了一個合法的數據包,然後做正確的事情。

下面的示例RX處理程序只是驗證數據包是否合法,提取Command(即Opcode),可選的數據長度和可選的負載。然後它列印一條消息,並將一條消息發送回主機,該消息格式為WICED HCI命令HCI_CONTROL_EVENT_COMMAND_STATUS,數據值為HCI_CONTROL_STATUS_UNKNOWN_GROUP。



WICED HCI TX

在應用程序內部,通過使用16位操作碼調用wiced_transport_send_data,指向可選數據和數據長度的指針,可以向主機發送WICED HCI消息。在你有WICED_BT_TRACE設置發送WICED HCI Trace消息的情況下,當你調用WICED_BT_TRACE API時,它所做的只是格式化你的數據,然後它調用這個:

sprintf(string,…);

wiced_transport_send_data(HCI_CONTROL_EVENT_WICED_TRACE,&string,strlen(string));

例如,如果您調用WICED_BT_TRACE(" abc ");它會發送:19 02 00 03 00 41 42 43

19 = HCI報文

02 =命令代碼(Trace)

00 =組碼(設備)

0300 =額外字節數(小端數)

41 = ' '

42 = ' b '

43 = ' c '


下一篇將介紹“通過Arm調試埠SWD和J-Link調試

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論