• 巧用JLINK来实现nrf51822的蓝牙设备流水号


    项目需求:在蓝牙广播的时候名字为 SN_设备流水号(如SN_00000001)。

    我们可以在原来的代码中进行一下修改和增加

    1 const uint32_t MY_UICR_ADDR __attribute__((at(0X0001B160))) __attribute__((used)) = 1;
    

     备注这个地址0X0001B160根据自己具体情况来设定

     1 /**@brief Function for the GAP initialization.
     2  *
     3  * @details This function will set up all the necessary GAP (Generic Access Profile) parameters of 
     4  *          the device. It also sets the permissions and appearance.
     5  */
     6 static void gap_params_init(void)
     7 {
     8     uint32_t                err_code;
     9     ble_gap_conn_params_t   gap_conn_params;
    10     ble_gap_conn_sec_mode_t sec_mode;
    11 
    12     
    13     const int len = strlen(DEVICE_NAME) + 8;             
    14     char name[len];                                      
    15     
    16     int32_t serial_number;
    17     
    18     serial_number=*(int32_t *)0X0001B160;
    19     
    20     
    21     BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode);
    22     
    23     sprintf(name, "%s%08d", DEVICE_NAME,serial_number);        
    24 
    25     err_code = sd_ble_gap_device_name_set(&sec_mode,
    26                                           (const uint8_t*)name,
    27                                           len);
    28     APP_ERROR_CHECK(err_code);
    29    
    30 
    31     memset(&gap_conn_params, 0, sizeof(gap_conn_params));
    32 
    33     gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL;
    34     gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL;
    35     gap_conn_params.slave_latency     = SLAVE_LATENCY;
    36     gap_conn_params.conn_sup_timeout  = CONN_SUP_TIMEOUT;
    37 
    38     err_code = sd_ble_gap_ppcp_set(&gap_conn_params);
    39     APP_ERROR_CHECK(err_code);
    40     
    41     err_code = sd_ble_gap_tx_power_set(TX_POWER_LEVEL);
    42     APP_ERROR_CHECK(err_code);
    43 }

    现在上我们的主角J-Flash

    打开J-Flash(路径为Start->All Programs->SEGGER->J-Link V5.12f->J-Flash)

     下面的个步骤和平时使用j-flash来为MCU下载hex文件相同

     

     重要的步骤来了

    备注信息program serial number中

    address为指定烧写地址(或者重新覆盖数据地址)

    Next SN指定第一次要烧写的十进制数,之后的自动更据increment数值递增。

    LEN指定烧写数据长度。J-Flash烧写序列号最多支持4个字节,高于四个字节的数据J-Flash会将前四个字节取反再烧进去

    现在将刚才工程进行编译后将其nrf51422_xxac_s110.hex和s110_nrf51_8.0.0_softdevice.hex进行合并

     双击merge_hex.Bat文件(偷懒ing)

    @echo off
    ::关echo
    mergemergehex.exe --merge  hexs110_nrf51_8.0.0_softdevice.hex  hex
    rf51422_xxac_s110.hex --output firmware_s110.hex
    
    del hexwithoutsn.hex/s
    ::删除中间临时文件
    #pause

    使用j-flash来打开刚才的合并后hex文件

    查看原先代码中0X0001B160的数据

    现在使用J-FLASH进行下载

    查看刚才0X0001B160的数据

    下载后看手机app

     我们再重复几次

    小窍门:

    同时也会在Jflash的工程目录(之前加载的sample prject的目录)下生成一个“<JFlashProjectName>_Serial.txt”,内容如下图,其中“4”为下次要写入的数据,系统自动为其加1了(由“Increment”决定):

    更多关于JFlash可以参考下面中文件

    https://www.segger.com/admin/uploads/productDocs/UM08003_JFlash.pdf

    或者可以segger的安装路径中找到C:Program Files (x86)SEGGERJLink_V512fDocManualsUM08003_JFlash.pdf

  • 相关阅读:
    项目中常用的linux命令
    Flutter移动电商实战 --(12)首页导航区域编写
    Flutter移动电商实战 --(13)ADBanner组件的编写
    Flutter移动电商实战 --(10)使用FlutterSwiper制作轮播效果
    Flutter移动电商实战 --(9)移动商城数据请求实战
    Flutter移动电商实战 --(8)dio基础_伪造请求头获取数据
    Flutter移动电商实战 --(7)dio基础_POST请求的使用
    Flutter移动电商实战 --(6)dio基础_Get_Post请求和动态组件协作
    Flutter移动电商实战 --(5)dio基础_引入和简单的Get请求
    Flutter移动电商实战 --(4)打通底部导航栏
  • 原文地址:https://www.cnblogs.com/libra13179/p/6519637.html
Copyright © 2020-2023  润新知