HCI uart cannot recieve any data when recieve bad data which format is not same as WICED HCI UART Control Protocol

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
YaTr_3516311
Level 5
Level 5
25 sign-ins First solution authored 100 replies posted

Hi,

I'm testing HCI uart function which recieve data command. When test use "19 01 01 02 00 01 01"(scan) command. It is fine( Debug trace shown hci_control_process_rx_cmd : Data Length '6). But when I test data which is not done as WICED HCI UART Control Protocol, use "00 01 01 33 55 65", "hci_control_process_rx_cmd : Data Length"  debug trace not shown. And after that I use nomarl command ""19 01 01 02 00 01 01"(scan)", debug trace still not shown and I tried many times. No this trace come even I input normal format command.

1. Debug trace shown the len is not calculated 19 byte. Right? Because I input 7 bytes command(19 01 01 02 00 01 01), and this log shown len is 6.

2. I test abnormal command because I worried that there will be useless data been received by this uart. And I want this uart still can work normal, still can recieve data. But unfortunatelly, it works not fine. And even I send normal format command, it still cannot receive data(Because no debug trace shown). How to fix this problem? Attach is my code. Please have a check

0 Likes
1 Solution

在raw data模式下,设备不会接收HCI UART指令。

在Recover模式下,设备从内部的rom code启动,可以接收烧录的HCI指令。

所以,当需要升级程序的时候,让设备进入recover模式,然后通过HCI口烧录程序。

View solution in original post

0 Likes
19 Replies
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

This is a known issue for the HCI UART and don't have a resolution yet.

If you are worried about the abnormal command, please use the HCI RAW data mode.

1. If use HCI RAW data mode, then cannot use "2.6 HCI Commands and Events During a Serial Flash Download" which means HCI commands. Right?

2. MCU with bluetooth module via HCI uart, and I want use HCI commands to upgrade bluetooth FW. if use HCI RAW data mode, how to upgrade bluetooth module FW? Custom commands and do all the upgrading by myself?

0 Likes

1. Yes, in raw data mode, you need to customize your own command.

2. You can set the device in recover mode and reprogram FW with HCI UART.

2. Set device in recover mode means in download mode?

    reprogram FW with HCI UART  means  re-init uart with WICED_TRANSPORT_UART_HCI_MODE?

0 Likes

After reprogram, the HCI UART will follow the setting in the new FW.

0 Likes

Hi,

我不明白您说的

1. reprogram FW with HCI UART是什么意思?是指开始初始化用HCI RAW data mode 然后想要升级固件的时候再用WICED_TRANSPORT_UART_HCI_MODE重新初始化一下吗?

2. 怎么进入recover mode?  recover mode是指downlaod mode吗

0 Likes

在你的应用程序里,将HCI UART配置为raw mode,可以接收raw mode的指令。重新烧写程序的时候,因为你的应用程序修改了HCI UART的默认配置,所以需要在recover模式下烧写。recover是通过外部硬件配置的,不需要重新初始化,请参考doc/WICED-CYW920706WCDEVAL-Kit-Guide.pdf文档,附录D中的说明进行recover的操作。

0 Likes

我是要在同一个固件里实现通过MCU来更新蓝牙固件的功能(即HCI command的功能)和wiced hci command的功能。所以不可能会有重新烧录的情况。

如果选择raw mode,那么就不可能直接使用hci command来做固件更新的事情(需要自己软件实现二次开发)

如果选择hci mode,那么就会出现rx收到垃圾数据(不是规范的wiced hci command)后无法再收取数据问题

我的问题是有没有合适的解决方案?既能直接使用hci command又能规避rx接收数据的问题?

0 Likes

抱歉,如果要使用HCI Command的同时,避免rx接收错误数据,目前没有合适的解决方案。

0 Likes

我想了一个方案,平时用raw mode,然后如果要mcu更新蓝牙模块的时候,就再次初始化成hci mode.

1. 这样可行吗?

2. 如果用raw mode,平时使用的话还是移植wiced hci commnad(header是5bytes)的做法,会有啥问题吗

0 Likes

我之前的建议可能说的不是很清楚,你可以使用上位机MCU通过HCI接口对设备进行烧录。我的建议是你通过重新烧录来代替升级。烧录的指令在WICED-HCI-Control-Protocol.pdf文档中第2部分有介绍。

你的做法相当于是将应用程序分为两部分,也是可行的。

0 Likes
YaTr_3516311
Level 5
Level 5
25 sign-ins First solution authored 100 replies posted

你可以使用上位机MCU通过HCI接口对设备进行烧录。我的建议是你通过重新烧录来代替升级。烧录的指令在WICED-HCI-Control-Protocol.pdf文档中第2部分有介绍。

如果设置成raw data mode,也可以用hci command来进行烧录?比如发送01 03 0C 00(HCI_RESET command)会有回复? 我测试了一下 raw data mode下这个命令没有回复啊?但是hci mode下是有回复的。

所以我的认知就是:

1. raw data mode:可以很好的接收数据,但是不能用HCI command的命令进行程序烧录

2. hci mode:可以使用hci command命令进行烧录  还可以使用wiced hci command命令。但是rx需要接收格式化的数据,否则将收不到任何数据

0 Likes

在raw data模式下,设备不会接收HCI UART指令。

在Recover模式下,设备从内部的rom code启动,可以接收烧录的HCI指令。

所以,当需要升级程序的时候,让设备进入recover模式,然后通过HCI口烧录程序。

0 Likes

1. 您说的进入recovery模式的意思是按照下面的步骤操作吗

pastedImage_0.png

2. 我按照上面的操作步骤,进入recovery模式后测了一下命令,01 03 0C 00是可以回复的。01 18 FC 06 00 00 00 C2 01 00及以后的都没有回复

pastedImage_1.png

3. 如果按照您说的做法,那么是不是硬件上需要SPI2_MO脚(recovery pin)?

0 Likes

在recover模式下,波特率默认为115200,不用发送update baudrate的指令。而且DL_MINIDRIVER的指令(01 2E FC 00)没有回复也是正常的。请继续发送后续的指令。

0 Likes

明白。

1. 以下是我的测试,01 4C FC 07 00 00 00 FF 01 02 03命令没有回复

pastedImage_0.png

2. 如果命令支持的话,硬件上需要SPI2_MO脚(recovery pin)?

3. 所以说,如果选择raw data mode的话,需要 SPI2_MOSI脚和rest 脚使其进入recovery mode来进行蓝牙固件的升级,如果选择hci mode的话,就不需要这个硬件的操作,直接发01 03 0C 00,01 18 FC 06 00 00 00 C2 01 00,01 2E FC 00,01 4C FC 07 00 00 00 FF 01 02 03这些命令就行了?

0 Likes

建议你使用cypress的module programmer烧写工具,这个工具可以用来烧写20706的芯片,在recover模式下烧写,烧写时在设置中选择 "edit->preferences->set application to log" 为 everything。WICED Module Programmer User Guide – KBA225060

然后可以在log的窗口看到这个工具发送的所有HCI指令以及设备回复的指令,然后你的上位机按照这个指令进行操作就可以了。

进入recover模式需要用到SPI2_MO的引脚。

0 Likes

1. 我不能使用这个工具,因为产品出去以后,不可能再使用烧写工具。所以我们的MCU连着通信模块和蓝牙模块,通过通信模块来获取蓝牙版本并存下来,然后通过mcu来更新蓝牙模块。

2. 所以说,如果选择raw data mode的话,需要 SPI2_MOSI脚和rest 脚使其进入recovery mode来进行蓝牙固件的升级,如果选择hci mode的话,就不需要这个硬件的操作,直接发01 03 0C 00,01 18 FC 06 00 00 00 C2 01 00,01 2E FC 00,01 4C FC 07 00 00 00 FF 01 02 03这些命令就行了?

0 Likes

1. 我的意思是,你用这个工具看一下发了那些指令,参考这些指令来写你自己MCU端的代码。

2. 是的。

0 Likes