我从2013年开始接触BLE,从TI CC254X,NODIC NRF51822 ,DIALOG DA1458X……开始,也算是对BLE有一定了解的了,这些都外国的产品,那些还没有国产的BLEnder方案。当初看到这个FR8016HA开发板时,还是觉得挺有意思的:国产芯片,240*240彩屏,音频,空气质量检测……,就试着申请,没想到真的申请到了。


   经过“开箱初体验”之后,现在来了体验一下BLE:
   打开SDK,(FR801xH-SDK)文件不多,freqchip-FR801xH-SDK-master.zip总共才24M,内容也直观:
    components --------------里面包括了,ble,driver,modules,toolchain
    docs-----------------------主要是:FREQ BLE SDK User Guide V1.0.pdf
    examples------------------例程
    tools-----------------------主要是下载工具:FR8010H_Download_Tool.exe
  我的习惯,先打开一个demo: \FR801xH-SDK\FR801xH-SDK\examples\dev1.0\ble_simple_peripheral\keil\ble_simple_peripheral.uvproj,编译一下,出了点问题,竟然出错了,按理说不应该啊,第一次是用Keil4,换了一个Keil5,还是出错了,再查一下readme:
BUILDING IMAGE
KEIL V5.23 recommended

只好重新安装了一个高版本的,终于编译出来了!!!Program Size: Code=104660 RO-data=237012 RW-data=2384 ZI-data=5012  
再看一下工程结构:
1.png

直观,清晰,一目了然。
    main是在lib里,我们用户的入口是proj_main.c:
    void user_entry_before_ble_init(void):主要是硬件初始化;
    void user_entry_after_ble_init(void):主要是应用初始化;
void user_entry_after_ble_init(void)
{
    co_printf("BLE Peripheral\r\n");

    // User task initialization, for buttons.
    user_task_init();

    // Application layer initialization, can included bond manager init,
    // advertising parameters init, scanning parameter init, GATT service adding, etc.   
    simple_peripheral_init();
}

再看下去,user_task_init();创建了二个任务:
void user_task_init(void)
{
    user_task_id = os_task_create(user_task_func);
    audio_task_id = os_task_create(audio_task_func);
}

一个是用户功能的任务,主要是按键处理事件;一个是音频任务,用来播放音频。
再看下一步,simple_peripheral_init();主要是初始化BLE相关,初始化外设,再打开定时,定时处理外设数据。
大致流程就这样,还是比较简单直观的。
再来看看重点,蓝牙BLE,主要是服务方面,增加了二个服务:
        // Adding services to database
    sp_gatt_add_service();
        speaker_gatt_add_service();       

看看基本的sp服务:
void sp_gatt_add_service(void)
{
        simple_profile_svc.p_att_tb = simple_profile_att_table;
        simple_profile_svc.att_nb = SP_IDX_NB;
        simple_profile_svc.gatt_msg_handler = sp_gatt_msg_handler;
       
        sp_svc_id = gatt_add_service(&simple_profile_svc);
}

很简单,服务属性列表,服务属性数量,消息处理;搞过BLE的来说,太简单了,这个几乎是我用所有BLE里最简单的一个,一看就懂,我就不多说了。到些,例程基本就看完了。
    结论:研究了官方提供的例程,对FR801xH-SDK有了基本的了解,给我的感觉:简单,清晰,爽!
    虽然开源的不多,但如果官方的lib足够稳定,那对用户来说,就是最省心的。