巧用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
merge\mergehex.exe --merge  hex\s110_nrf51_8.0.0_softdevice.hex  hex\nrf51422_xxac_s110.hex --output firmware_s110.hex

del hex\withoutsn.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)\SEGGER\JLink_V512f\Doc\Manuals\UM08003_JFlash.pdf

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM