zoukankan      html  css  js  c++  java
  • RF 测试代码体会

    这里的需求是完成一个cc2540 RF测试程序。实现功能为开发板按键控制 RF 发射频率的改变。

    首先被告知要用PTM来做这个测试程序,然后我去了PTM的介绍文档,地址为 http://processors.wiki.ti.com/index.php/PTM 

    经过阅读后知道PTM就是为了测试而诞生的,它主要的原理就是:首先配置为 Network Processor 模式,当协议栈进入PTM模式后,HCI直接暴露在UART之上。通俗点说这时的串口就不是一般的串口了,它可以用来接收特殊的指令,这里特指HCL COMMANDS,HCI层会将特殊的指令交给该层的API使用,就是直接控制链路层或者物理层了吧。

    经过思考发现我要写的测试程序和这个PTM不完全相同,因为我不需要串口,我的测试程序(即应用程序)是直接跑在开发板上的,不是 Network Processor 的配置,而是Single-Device 的配置。而且我查了HCI层相关的API发现有DTM模式下发送和接收数据的API,如

    extern hciStatus_t HCI_LE_TransmitterTestCmd( uint8 txFreq, uint8 dataLen, uint8 pktPayload ); 

    extern hciStatus_t HCI_LE_ReceiverTestCmd( uint8 rxFreq );

    extern hciStatus_t HCI_LE_TestEndCmd( void );

    所以我直接使用这几个API,但是最后发现如果拿两块板做测试的话,怎么接收数据呢?HCI_LE_TransmitterTestCmd()函数发送后返回一直是0,而HCI_LE_ReceiverTestCmd()接收返回也一直是0。然后上网查了很多资料并没有解决。

    另外一条路线:

    在HCI的API里发现有这样的外部函数:

    extern hciStatus_t HCI_EXT_ModemTestTxCmd( uint8 cwMode,uint8 txFreq );

    extern hciStatus_t HCI_EXT_ModemTestRxCmd( uint8 rxFreq );

    extern hciStatus_t HCI_EXT_EndModemTestCmd( void );

    从函数的名字可以看出来有 LE 和 EXT 之分,没错,他们是有区别的,LE 是标准协议栈里的,而 EXT 是厂商自己扩展的,不同厂商的蓝牙方案可能会有不同的扩展,这里的扩展是 TI 公司的。

    两种方式测试检测,因为扩展的API没有数据包的传输,下面去用频谱仪测试:

    当你坚持做一件完全正确的事情,有可能在很长一段时间内,你的价值都是零。
  • 相关阅读:
    java-继承的注意事项
    java-代码块-局部代码块、构造代码块、静态代码块
    java-源文件中可以有多个类,但是最多只能有一个public修饰
    java-权限修饰符的区别
    APP测试-adb简介
    APP测试-Android模拟器
    APP测试-SDK环境 for Windows
    自动化测试-流程
    接口测试-接口请求关联
    接口测试-moco+excel+requests框架
  • 原文地址:https://www.cnblogs.com/lweleven/p/ble_hciapi.html
Copyright © 2011-2022 走看看