项目需求:在蓝牙广播的时候名字为 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