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有四個主要用途:
- 發送/接收WICED HCI消息
- 鏡像HCI命令到PC
- 下載固件到Controller Stack進行編程
- 連接Controller Stack與遠行Host Stack的PC或者MCU(如: PSoC 6 + CYW43012中看到這一點)
通常有6種類型的數據通過這兩個uart傳輸:
- Raw data -應用程序發送/接收到PC任何格式的數據
- Debug Trace-從應用程序調試信息
- WiCED HCI Msg- PC和藍牙應用程序之間用Cypress WICED HCI格式打包的數據包
- HCI Spy-在支持WICED系列的晶片中HCI的數據包的鏡像
- HCI命令-在PC或MCU (當晶片處於Controller模式時)上運行的Host stack與controller之間的HCI命令
- 固件-從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配置傳輸系統。要做到這一點,你需要做以下事情:
- 包含wiced_transport.h和hci_control_api.h。
- 聲明一個指向wiced_transport_buffer_pool_t的指針。
- 創建一個wiced_transport_cfg_t類型的全局結構,其中包含HCI UART配置,包括接收和傳輸緩衝區的大小,一個指向狀態處理程序函數的指針,一個指向RX處理程序函數的指針和一個指向TX完整回調函數的指針(如果需要)。
- 調用wiced_transport_init(使用指向配置結構的指針)。
- 調用wiced_transport_create_buffer_pool創建供傳輸系統使用的緩衝區。
- 創建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調試”
評論