这里的需求是完成一个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没有数据包的传输,下面去用频谱仪测试:

RF 测试代码体会的更多相关文章

  1. .NET单元测试的艺术-3.测试代码

    开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录 ...

  2. mysql锁 实战测试代码

    存储引擎 支持的锁定 MyISAM 表级锁 MEMORY 表级锁 InnoDB 行级锁 BDB 页面锁 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低.行级锁:开销 ...

  3. 使用Microsoft Fakes隔离测试代码

    在单元测试(Unit Test)中我们遇到的问题之一是:假如被测试组件(类或项目)为A,组件A依赖于组件B,那么在组件A的单元测试ATest中测试A时,也需要依赖于B,在B发生改动后,就可能影响到A的 ...

  4. iOS开发:XCTest单元测试(附上一个单例的测试代码)

    测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...

  5. 在内核中异步请求设备固件firmware的测试代码

    在内核中异步请求设备固件firmware的测试代码 static void ghost_load_firmware_callback(const struct firmware *fw, void * ...

  6. x264测试代码

    建立一个工程,将头文件,库文件加载到工程,测试代码如下:#include <iostream>#include <string>#include "stdint.h& ...

  7. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

  8. Git合并开发代码分支到测试代码分支

    ——转载请注明出自天外归云的博客园 用TortoiseGit下载代码到本地 首先需要在本机安装好TortoiseGit.然后在随便哪个路径下比如D盘,右键“Git Clone”: 然后URL处选择项目 ...

  9. mvn编写主代码与测试代码

    maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包.默认情况下,Maven假设项目 ...

随机推荐

  1. C\C++ 获取当前路径

    C\C++ 获取当前路径   获取当前工作目录是使用函数:getcwd.cwd指的是“current working directory”,这样就好记忆了. 函数说明: 函数原型:char* getc ...

  2. Redis redis-cli常用操作

    一.安装 二.连接 在bin目录下./redis-cli -p port -a password 授权auth password 查看是否连接成功 ping PONG表示连接成功 三.键值相关命令 k ...

  3. JQuery的概述

    一.什么是 jQuery 1.jQuery是一个JavaScript库,jQuery 极大地简化了 JavaScript 编程.它通过封装原生的JavaScript函数得到一整套定义好的方法. 2.它 ...

  4. 转!!mysql order by 中文排序

    1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都存在. 如果这个问题不解决,那么MySQL ...

  5. Setup Factory Error3014

    在用Setup Factory打包软件的时候出现Error3014 一般都是由于软件冲突引起的 我的问题是由于杀毒软件 ,在打包的时候关闭杀毒软件 就能成功打包了.

  6. Centos7下搭建LAMP平台环境 (转载)

     1.启用Apache(httpd) Centos7默认已经安装httpd服务,只是没有启动.如果你需要全新安装,可以yum install -y httpd 启动服务:systemctl start ...

  7. linux如何修改文件或目录的权限(chmod)

    chmod命令是linux上用于改变权限的命令,-R 是递归遍历子目录,因为你要操作的文件使用的*通配符.777,第一个7代表文件所属者的权限,第二个7代表文件所属者所在组的权限,第三个7代表其它用户 ...

  8. jquery插件开发基础入门

    jquery插件开发基础入门 入门 编写一个jquery插件开始于给jquery.fn加入新的功能属性,此处添加的对象属性的名称就是你的插件名称 jQuery.fn,myPlugin = functi ...

  9. 字符串与Objec之间互相转换

    字符串与Objec之间互相转换可通过json实现. JSON.parse(str);// 字符串转Json Object JSON.stringify(obj);// Obj转字符串

  10. 三星在GPL下发布其exFAT文件系统实现源码

    exFAT文件系统是微软的一个产品,设计让外置储存设备和PC之间实现无缝的TB级数据转移和数据交换,它只支持Windows和OS X,不支持Linux.作为一个含有大量专利的私有产品,没有人会预计它会 ...