[原创] BLE_CC2540_初学者入门指导_02

lyzhangxiang   2014-9-24 21:28 楼主
四、站的高一点点

1、基本上搞清楚一个应用程序由哪些部分组成,需要做哪些初始化,App函数的位置,以及各种事件的响应方式。

2、关于CC2540 RF寄存器的问题:

1)User Guide上面未详细介绍寄存器的各个位,只有简单的寄存器说明,查阅E2E确定TI未开放,所以无法编写RF部分的驱动。

2)TI建议的方式:Note, that OSAL and HAL source is avail, a free sniffer is avail, and RF studio can access RF directly.


3)打开RF Studio CC2540界面,好好看看有哪些部分,对于测试等等有很大用处的。



原则上能够进行数据包的收发测试。

3、查阅相关TI Bluetooth的器件,简单对比如下:






五、开始搞起了

通过对TI_BLE_Vendor_Specific_HCI_Guide.pdf 和e2e上相关讨论的学习,总结如下;

1、可以通过HIC Command对CC2540进行相关操作,总体描述见下图。



2、关于CC2540 Production Test Mode参考网址:

http://processors.wiki.ti.com/index.php/PTM

3、创建CC2540测试工程文件,主要是删除协议部分的和某些无关的OSAL初始化程序。

uint16 UserApp_ProcessEvent( uint8 task_id, uint16 events )
{
    if ( events & USER_START_DEVICE_EVT )
    {
        HCI_EXT_SetTxPowerCmd (HCI_EXT_TX_POWER_4_DBM);
        HCI_EXT_ModemTestTxCmd (HCI_EXT_TX_MODULATED_CARRIER,37);

        //HCI_EXT_ModemHopTestTxCmd ();
        //HCI_EXT_ModemTestRxCmd (37) ;
        //HCI_EXT_EndModemTestCmd ();

        return ( events ^ USER_START_DEVICE_EVT );
    }
    return 0;
}



主要涉及的函数:

HCI_EXT_SetTxPowerCmd             设置发射功率
HCI_EXT_ModemTestTxCmd          开始连续的发送测试,需要指定信道和是否调制  
HCI_EXT_ModemHopTestTxCmd     开始连续的发送测试,发送37Byte 数据包(伪随机数),且信道从0-39递增
HCI_EXT_ModemTestRxCmd          开始接收测试,需要指定信道
HCI_EXT_EndModemTestCmd        停止Modem测试




六、简单分析

1、以Central、Peripheral之间通信为例,学习BLE-stack设备之间的数据通信:

1)Peripheral 通过GATT_Notification函数实现数据发送,这种情况下外围设备扮演Seriver(注1)。
2)Central 通过GATT_MSG_EVENT事件触发任读取 gattMsgEvent_t 结构体中的 msg对应的 Indication and Notification messages(参考程序中相关结构体)实现数据接收,这种情况下中央设备扮演Client(注2)。

注1:
  static attHandleValueNoti_t *pReport= NULL;

  if ( GATT_Notification( 0, pRepor, FALSE )==SUCCESS)
  {

   //用户可在这里进行发送成功后的相关操作,pRepor为待发送的Notification

  }

  /**
   * Handle Value Notification format.
   */
  typedef struct
  {
    uint16 handle;                             //!< Handle of the attribute that has been changed (must be first field)
    uint8 len;                                   //!< Length of value
    uint8 value[ATT_MTU_SIZE-3];      //!< New value of the attribute
  } attHandleValueNoti_t;


  注2:
  if ( pMsg->method == ATT_HANDLE_VALUE_NOTI ||pMsg->method == ATT_HANDLE_VALUE_IND )
  {
   
     attHandleValueNoti_t noti;
   
     dataCount = dataCount+ 1;
      
     LCD_WRITE_STRING_VALUE( "Data Cnt: ", dataCount, 10, HAL_LCD_LINE_1 );
     
     noti.handle = pMsg->msg.handleValueNoti.handle;

     noti.len = pMsg->msg.handleValueNoti.len;
     
     osal_memcpy(¬i.value, &pMsg->msg.handleValueNoti.value,noti.len);
     
    //用户可在这里操作¬i,通过串口发送或者USB发送出去等等
         
  }


2、建立连接的某些细节函数还未搞清楚,发送数据所能够被用户看到的最底层函数如1中描述


3、进一步计划:

1)通过Central、Peripheral之间通信为基本模板先实现设备之间建立连接,然后使用1中方式实现数据交换。
2)在1)的基础上加入串口通信实现串口之间的通信,并能够通过串口控制设备建立连接的过程等。
3)使用Dongle实现USB功能,主要是将HostTestApp中的CDC类USB程序提取出来,实现Dongle与PC间数据通信,不涉及BLE-stack协议栈相关只是一个USB程序。
4)由于CDC类的USB相对而言要简单一些,上位机编程可以使用串口,在3)的基础上再去实现HID,具体关于这一部分USB驱动和上位机等还没有很清晰的思路。

4、需要做的事情:

1)使用购买的CC2540验证链接建立数据交互的功能。
2)实现CC2540的UART与PC通信的功能。
3)使用Dongle实现CDC类USB与PC通信的功能。
4)使用Dongle实现HID类USB与PC通信的功能。

附件:



GATT_Notification、GATT_Indication函数的说明,不能够独立运行需要在建立连接的基础上。






电工

回复评论 (1)

您好,请教关于cc2540蓝牙RF PHY测试,根据PTM文档,修改了一下程序,是在应用层面做的修改,修改后将GPIO口P0.4接GND,上电即进入测试模式,用串口调试助手发测试指令貌似板子没动静,连上频谱仪也抓不到信号,谢谢指导!
点赞  2015-6-12 15:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复