CC2541在PTM模式下,UART不能使用
Hi,
TI和论坛中的各位大牛们,我按照TI WiKi上http://processors.wiki.ti.com/index.php/PTM_(Production_Test_Mode)的配置,基于1.4.0协议栈,在SimpleBLEPeripheral例程中加入PTM模式。根据测试,通过将P0.4拉低,复位模块后,模块进入了PTM模式,但是在串口上发送相关测试命令,串口上没有任何回应信息,但是如果把CC2541_SmartRF_HostTestRelease_All.hex文件烧进入之后,在串口上发送命令,串口会接收到对应的回应的信息,这是怎么回事?
测试命令
开始TX发送测试的命令: HCI_LE_Transmitter_Test
发送这个16进制命令, 开始Tx测试: 01 1E 20 03 xx yy zz
xx = 你想要发送数据的频段号, 可以是从0x00到0x27之间的任何值(BLE 频段号从 0 到 39)
yy = 每个测试数据包的数据有效载荷长度, 可以是从0x00 到 0x25
zz = 在数据包中有效载荷的类型代码. 如下所列的值可以选择:
0x00 Pseudo-Random bit sequence 9
0x01 Pattern of alternating bits ‘11110000’
0x02 Pattern of alternating bits ‘10101010’
0x03 Pseudo-Random bit sequence 15
0x04 Pattern of All ‘1’ bits
0x05 Pattern of All ‘0’ bits
0x06 Pattern of alternating bits ‘00001111’
0x07 Pattern of alternating bits ‘0101’
发送HCI_LE_Transmitter_Test 命令到设备以后, 会收到如下所述的回复, 表示命令已经被接受并且Tx发送测试模式已经开始: 04 0E 04 01 1E 20 00
开始Rx接收测试的命令: HCI_LE_Receiver_Test
发送这个16进制命令, 开始Rx测试: 01 1D 20 01 xx
xx = 你想要接收接收的频段号, 可以是从0x00到0x27之间的任何值(BLE 频段号从 0 到 39)
发送HCI_LE_Receiver_Test 命令到设备以后, 会收到如下所述的回复, 表示命令已经被接受并且Tx发送测试模式已经开始: 04 0E 04 01 1D 20 00
用于终结Tx 或者 Rx 测试的命令: HCI_LE_Test_End
发送这个16进制命令, 终结Rx 或 Tx测试: 01 1f 20 00
发送HCI_LE_Test_End 命令到设备以后, 会收到如下所述的回复, 表示命令已经被接受并且测试模式已经终结: 04 0e 06 01 1f 20 00 xx xx
xx xx = 00 00 Tx发送是否已经被执行
xx xx = 如果Rx接收被执行, 收到的总共的包的个数.
alen,
请确认在工程里面是否用了正确的PTM库。CC254x_BLE_HCI_TL_PTM.lib
Hi,Yan
上面的帖子发错了,以当前帖子回复为主。
根据你的回复,将工程中的库改为CC254x_BLE_HCI_TL_PTM.lib之后,在PTM模式下,UART仍然无法正常工作。但如果将应用层的串口配置为P0.2和P0.3时,PTM模式下串口会工作正常。可是我的应用层是将P1.4和P1.5作为串口的。
请问这是怎么回事?PTM模式下的串口配置与正常模式下的串口配置到底有什么关系?
在不修改正常模式下串口配置的前提下,我该如何配置才能解决这个问题?
Hi,YAN
经过我的验证,确实是没有导入正确的库的问题,但是我发现1.4.0协议栈中CC254x_BLE_HCI_TL_PTM.lib存在问题,使用这个库,在PTM模式下,串口工作正常,但是在正常模式下的时候,串口会打印出一些未知数据(04 FF 05 01 04 00 01 FC 04 FF 05 03 04 00 03 FC ),如果在正常模式下,将库文件改为CC254x_BLE_HCI_TL_None.lib后,系统复位后,串口就不会有那些未知的数据打印出来。我怀疑是不是CC254x_BLE_HCI_TL_PTM.lib库本身存在问题,求验证。
alen,
最新的SDK已经是1.4.1, 建议你更新到最新的SDK再试试,硬件不需要改。
Yan,
经过我的验证,在1.4.1协议栈上,PTM工作时正常的。
请问SimplePeripheral工程里,进入PTM模式相关代码要怎么修改?可以麻烦您指教一下么?我卡在这个问题上已经卡了一个月了。。谢谢。(也是用的WT-200测,协议栈版本1.4.1,库文件ptm.lib也添加了)我的代码如下:(哪里出错了,麻烦您指教一下好吗?谢谢)
void llSetupPTMTestPort( void )
{
P0SEL &= ~(BV(PTM) | BV(RDY)); // GPIO
P0DIR &= ~BV(PTM); // 输入, 这个是DUT的CTS, 测试仪的RTS
P0DIR |= BV(RDY); // 输出, 这个是DUT的RTS, 测试仪的CTS
P0 |= BV(RDY); // 首先, 拉高DUT的RTS输出, 就是测试仪的CTS
P0INP &= ~BV(PTM); // 让P0.4的输入模式由P2INP寄存的器配置来决定
P2INP &= ~BV(PDUP0); // 把P0.4拉高, P0中其他口拉低
}
void SimpleBLEPeripheral_Init( uint8 task_id )
{
llSetupPTMTestPort();
if ( TESTER_CONNECTED() )
{
HCI_EXT_EnablePTMCmd();
}
else
{
simpleBLEPeripheral_TaskID = task_id;
// Setup the GAP
......
......
只能通过更新协议栈的方式来解决PTM吗,