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次,发文人进小黑屋喔~

评论