CMSIS-DAP - 1
收錄於 : 關於Ameba的一百篇
CMSIS
CMSIS 是 Cortex Microcontroller Software Interface Standard 的縮寫
意指 使用 ARM cortex-M MCU 時, ARM 為了晶片商/系統開發商 方便,
所定的 軟體 接口標準.
DAP 是 Coresight Debug Access Port
CMSIS-DAP 是 ARM 提供的一個標準的介面, 可以透過 usb - CMSIS-DAP
來 debug cortex-M 處理器
使用這個, 可以有三個好處
1. 作為 Ameba 從 usb download firmware 到 Ameba 上的 flash
2. 可用作 uart/serial 轉 usb 到 PC 的工具
3. 可以當作 JTAG/SWD debug Ameba 的工具
所以可以省下 JLINK/Multi-ICE 和 usb-serial 轉接線 的開發成本
而 ARM 所提供的 DAP firmware, 可以參考這篇 :
ARM mbed 文中介紹兩個 chip solution
(1) NXP LPC11U35
(2) Freescale KL25Z
而 Ameba 是使用 NXP 的 LPC11U35
===
這篇主要以 Ameba 開發板為例,
介紹如何寫 LPC11U35 的 firmware, 進而開發 CMSIS-DAP
DAP 的作法, 也可以參考
====
前置工作:
1. 保護還原作法:
在製作前, 用 Ameba 板 更換 DAP firmware 的方式可以參考這篇
可以先把原本 firmware.bin 備份, 避免自己寫的 DAP firmware 寫錯時,
還可以重新燒回
這個 DAP 更換方法, NXP 稱作 USB ISP mode
2. LPC11U35 datasheet
在開發前, 首先我們要了解 LPC11U35 . 可以下載他的 datasheet 來開
可以知道他是一個 cortex-M0 的 CPU , ARM 的 architecture 是 v6 而不是 v7 喔.
所用的詳細編號是這顆
- 64K on-chip flash
- 12K on-chip SRAM
- clock : 50MHz
3. HDK
當初 Ameba 開發板在製作時, 是參考 NXP 的 LPC1768 , 所以所接線路是類似的作法.
Ameba 板子是兩年前開發的, 所以參考的是底下這份.
上面有三個 LED :
LED_MSD : pin7
LED_HID: pin12
LED_UART : pin21
這次我們第一個範例, 就是來把 LED 點亮.
看線路圖, 要注意, 他接線是 3.3V 反向. 所以 GPIO 要填 0 才會亮.
(太久連自己一開始寫這範例都忘了.. )
這是因為平常腳位如果是 low 的話, 會浪費電 (current leakage)
所以反向平常不開 LED 維持 high.
4. 下載相對應的 toolchain
個人偏好使用這套 ARM gcc , 目前 2016 Q2 出到 5.4 版
5. 程式 : github
- cd exam1/build
- mkdir output
- make
會產生 firmware.bin, 再用上述置換 DAP firmware 的方式來做即可.
(1) linker script : ld/lpc11u35.ld
(2) Makefile
(3) Reset_Handler : src/startup_LPC11xx.c
(4) system init : src/system_LPC11Uxx.c
(5) gpio : gpio.c
須注意腳位, 要參考 datasheet.
譬如 LED_MSD 是 pin7, 但 GPIO 是對應到 20, 所以在 gpio.c 要設成 20
(6) 須注意 LPC firmware 需要做 checksum
目前 windows 的 checksum 可以從 LPC Xpresso 的 IDE 程式找出來.
MacOS 的方法, 本想找個同樣的程式, 發現這篇, 可以修改程式來自動計算
實驗後可行. 在 MacOS 燒錄時, 一個方式是用 dd 指令, 另一個簡便的方式是,
不用刪除原本 firmware.bin 檔, 只要覆蓋就可以了
$cp -f firmware.bin /Volumes/CRP\ DISABLD/firmware.bin
編譯時, 可執行 ./make-mac.sh
( 明天同步把 windows 也修正好 )
置換後, reset, 會發現 "CRP DISABLE" 名稱的 usb disk 會消失, 表示 firmware 有正確 load 執行.
( 如果 checksum 沒做, firmware 無法 正確載入, 就還會維持是 "CRP DISABLE" usb disk, )
這個例子就可以看到 LED 有亮起來.
後續 : 2. 加入小的 RTOS
留言
張貼留言