一、架構說明
模式 | 描述 | 優勢 |
主從一體 | 1. 多通道通信 2. 動态調頻 | 1對7 |
架構功能 | 1. RTX5 2.功能分層 | 架構清晰,內建部分功能友善開發 |
USB_HID | 滑鼠-鍵盤-磁滾輪-自定義通道 | 代碼健壯易懂 |
附帶功能 | BootLoader(usb) | - |
【注意】 CMSIS版本不能低于5.8.0,否則程式将不正常運作。 ARM.CMSIS.5.8.0.pack
5.8.0更新了 [GCC LinkerDescription,GCC 彙程式設計式啟動] [為工具鍊 ARM、GCC 添加了 ARMv8-M 堆棧密封(到連結器、啟動)]
[項目結構]
+---hand_write_board
| +---bsp
| | \---nrf52 [BSP層公共接口函數]
| +---chip
| | +---nRF_Drivers [晶片驅動函數]
| | +---nRF_Libraries [晶片支援函數]
| | \---nRF5_SDK_17.0.2_d674dde [晶片SDK版本]
| +---lib
| | \---queue [消息隊列]
| +---os
| | \---rtx5 [OS層公共接口函數]
| +---platform
| | +---log [日記函數]
| | \---SEGGER_RTT [RTT庫]
| +---protocol
| | \---usb_comm_ugee [USB手寫序列槽協定]
| +---sys
| | \---nrf52 [SYS層公共接口函數]
| +---main_HandWriteBoard [項目業務層]
| │ sdk_config.h (NRF功能配置)
| │ business_gpio.h (引腳定義)
| │ business_function.h (功能定義/業務宏)
| │ app_main.c (主業務功能)
| │ biz_flash.c (Flash資訊存儲和讀取)
| +---public [項目公共層]
| │ biz_esb.c (2.4G功能函數:發送端/接收端)
| │ biz_fds.c (重新封裝fds函數)
| +---biz_usb [USB業務層函數]
| | \---biz_usb.c (USB初始化/通道發送/USB資訊)
| +---public_usb [USB公共層函數]
| | +---app_usbd_string_desc.c (USB字元串描述符/目前系統類型)
| | \---app_usbd_core.c (USB裝置進階庫核心内部子產品/内部變量、輔助宏和函數)
[FLASH結構]
nRF52820 256 KB Flash, 32 KB RAM
0x40000 0x8000
使用boot時:keil需要在Options-c/c++-Define 添加宏定義 MBR_PRESENT
boot檔案:..\nrf52_boot\out\nrf52_boot_usb_dfu.hex
名稱 位址 大小(位元組)
|----------------------------------------------------------
MBR: 0x0000 0x1000 (mbr_nrf52_2.4.1_mbr.hex)
APP: 0x1000 0x40000 - boot_size - RSV1_SIZE - RSV2_SIZE - mbr_size = 0x31000
Boot: 0x32000 0xC000
RSV1: 0x3E000 0x1000 (settings.hex)--Bootloader setting
RSV2: 0x3F000 0x1000 (settings.hex)--MBR parameters
END: 0x40000
|-----------------------------------------------------------
boot+app addr: 0x0
fds addr:0x31000 - 0x0C00 = 0x30400
fds_size: 3 * 0x0400 = 0x0C00
注:使用BootLoader時,沒有燒錄【mbr_nrf52_2.4.1_mbr.hex】就會跳轉失敗,程式跑飛。
如何進入BootLoader模式?
1. 從[Bus Hound]找到裝置根節點[USB Composite Device],輕按兩下進入。
2. 新視窗選擇節點3(Interrupt Out), 設定資料長度12。
3. 在Hex Bytes 輸入02 FE, 點選上方[Run按鈕]。
如何恢複出廠設定?
1. 同上。
2. 在Hex Bytes 輸入02 DD, 點選上方[Run按鈕]。