目錄
- 合宙AIR105(一): Keil MDK開發環境, DAP-Link 燒錄和調試
- 合宙AIR105(二): 時鍾設置和延遲函數
- 合宙AIR105(三): 定時器, 定時器中斷和PWM輸出
- 合宙AIR105(四): SPI, MAX7219 8x8LED驅動
關於AIR105
AIR105是合宙LuatOS生態下的一款芯片, QFN88封裝. 2022年1月初上市, 開發板與攝像頭一起搭售. 與兆訊的 MH1903S 是同一款芯片, MH1903 系列還有 BGA169 等高密度封裝
主要配置參數: Cortex-M4F內核, 最高頻率204Mhz, 片上內建640KB SRAM和4MB Flash. 尺寸10x10mm, 56個可編程GPIO PIN.
功能特性
- ARM SecurCore™ SC300™核心
- 32-bit RISC Core(ARMv7-M)
- MPU 內存保護單元
- 最高 204MHz 主頻(1、2 分頻可調)
- FPU 單元
- 1 個受控 JTAG-DP/SW-DP 調試端口
- 640KB SRAM
- 1 個 QSPI 控制器, 支持 XIP
- 系統控制模塊(控制所有外設模塊時鍾及系統相關配置)
- 安全加密算法加速引擎
- 對稱算法: DES、TDES、AES-128/192/256
- 非對稱算法: RSA-1024/2048、ECC
- HASH 校驗算法: SHA-1/224/256/384/512
- 2 路 SmartCard 接口(支持 EMV Level-1 協議規范、ISO7816-3 標准), 其中 SCI0 集成 7816 電平轉換功能, 可配置輸出 3V 和 1.8V
- 4 路 UART 接口(均支持 4 線)
- 3 路 SPI 接口(其中 SPI0 主從可配, 其他 2 路僅支持 Master) * 1 路高速 SPI Master 接口 SPI5
- 1 路 IIC 接口
- 1 路 KBD(4x5 矩陣鍵盤)
- 8 個 32 位 TIMER(帶有 PWM 功能, 支持單周期輸出)
- 1 路 LCDI 接口, 支持 8080、6800 總線協議
- 1 個真隨機數發生器
- 1 個 DMA 控制器(支持 8 通道 DMA 傳輸)
- 1 個 CRC 模塊(支持 16Bit/32Bit、多種常用多項式計算)
- 最多支持 87 個 GPIO
- 最多支持 8 個靜態 Tamper 或 4 組動態 Tamper(4 輸出, 4 輸入), 動/靜態可配
- 1 組內部 Sensor(支持高低電壓、高低溫、Mesh、時鍾和 voltage glitch 檢測)
- 1 塊密鑰存儲區(支持硬件快速擦除)
- 1 個 USB(OTG-FS)
- 支持 USB2.0 和 OTG1.0a
- 內置 USB PHY 模塊
- 專用 DMA 通道和專有的中斷向量, 加快數據通信速度
- 集成內部看門狗
- 1 個 10bit DAC 接口
- 1 個 7 通道 12bit ADC, 最高支持 857KHz 采樣率(0 通道固定采集 CHARGE_VBAT 電壓, 其余通道采集電壓范圍 0~1.8V 或 0~3.6V 可配)
- 支持磁條解碼功能, 支持 ISO/ABA、AAMVA、IBM 和 JIS II 等標准卡
- 1 個 DCMI 接口
- 芯片集成一個可對外輸出 150mA 驅動能力的 LDO
- 芯片集成 USB 充電管理模塊, 支持最大 200mA 的充電電流
- 芯片集成開關機功能
- 支持 27.12M 輸出
資料下載
- 產品資料頁: https://doc.openluat.com/article/4369
- AIR150資料: https://wiki.luatos.com/chips/air105/index.html
- 燒錄說明: https://wiki.luatos.com/boardGuide/flash.html
使用Keil MDK + DAPLINK 燒錄和 Debug
合宙提供了這個芯片及開發板的 LuatOS 開發環境和工具鏈, 但還是有很多開發用戶希望能使用純C語言的環境和工具鏈. 在合宙用戶群群友(736314515@qq, 309670104@qq, 感謝)的幫助下, 把燒錄和調試部分跑通了, 以下說明如何在Keil5 MDK中使用 DAP-Link 燒錄 AIR105 開發板.
准備工作
板卡
- AIR105開發板
需要引出PC3口, 后面會說明 - DPALink轉接卡
可以使用標准的DAP-Link, 也可以使用WCH-Link卡(需要切換到DAP-Link狀態), 這兩種卡都測試過, 體現在軟件中是一樣的, 都可以使用
注意: 如果使用WCH-Link, 一定要看清電壓, 別誤接板上的5V輸出.
工具部分
- OK線, 用於引出PC3, 如果不知道OK線長什么樣的, 可以在某寶搜索. 如果有直徑0.2-0.3mm的漆包線也可以使用
- 特尖烙鐵頭, 搜索型號 900-SI, 900M-T-IS, 900M-T-I 這類特尖頭和特尖彎頭, 因為PC3對應的電阻為0402, 與開關貼得很近, 普通烙鐵頭不容易焊接
- 普通焊錫絲
- UV559(或者類似的, 非酸性)助焊油
軟件
硬件調整: 接出PC3
使用DAP-Link連接需要4根線: VCC, GND, SWCLK 和 SWDIO, 其中 SWCLK對的是PC4, 這個pin腳是現成的; SWDIO對的是PC3, 這個開發板並未接出PC3, 所以需要自行焊接引出.
根據開發板線路圖, 靠近開關一側的LED通過一個5K的電阻連接了PC3, 所以只需要從這個電阻的一側引出接線即可. 位置可以參考下圖的紅框部分.
可以使用圖中這種固定方式, 焊排針時多留一個排針, 將線一端先固定好, 另一端讓線尖正好搭在電阻的一側. 在線尖處加上助焊劑后, 烙鐵尖頭搭一點錫后將線焊上. 注意錫不能多, 時間不能太久. 焊完要用萬用表檢查一下, 量排針到電阻的另一側, 阻值是否正確.
修改PC3口輸出狀態
如果開發板還處於出廠狀態, PC3用於點亮LED, 會處於輸出狀態, 所以此時開發板通過DAP-Link連上電腦后, Keil中查看DAP-Link設備會顯示 DAP Error, 需要先刷入其他固件, 將PC3口的輸出狀態修改掉.
燒錄使用 Luatools, 參考燒錄說明. 可以自己制作(看最后的說明), 或者使用這個已經制作好的soc 點擊下載
燒錄成功后, PC3口不會再用於輸出, 串口會輸出大量雜亂內容, 可以忽略.
接線
3.3V和GND在Air105開發板上有好幾組, 選一組連即可
# DAP-Link -> Air105 Dev-Board
3.3V -> 3.3V
GND -> GND
SCK -> PC4 版上標識為 ADC5
SWD -> PC3 根據上面的說明額外接出
配置Keil5 MDK
開發板通過DAP-Link連上電腦后, 在Keil中查看DAP-Link就正常了, 識別 DAP-Link 和 Air105 不需要安裝額外的軟件
燒錄還需要配置Flash算法文件
1. 下載Flash算法文件
在前面准備工作中下載的FLM文件, 放到 C:\Keil_v5\ARM\Flash 目錄下, 這個目錄下能看到其他的 .FLM 文件.
2. 在Keil MDK中的設置
- 在Keil MDK中, 點擊 Project -> Option for Target ... 打開配置對話框, 切換到 Debug 標簽頁
- 在Use中選中 CMSIS-DAP Debugger, 點擊 Settings 打開對話框, 如果前面都操作正確的話, 這里在SW Device中能看到一個IDCODE為 0x2BA01477的設備
- 在這個對話框中, 左側的 CMSIS-DAP - JTAG/SW Adapter 中, 將 Max Clock 修改為 10MHz. 默認的1MHz會導致寫入時報 AIR105.FLM 文件無法載入的錯誤.
3. 設置FLM和內存大小
- 在這個對話框, 切換到Flash Download標簽頁, 可以看到 Programming Algorithm 列表是空白的, 點擊 Add, 選中 Air105, 點擊 Add 添加到列表
- 在這個對話框的右上角, RAM for algorithm 部分, 將 Size 修改為 0x00004000. 默認為 0x00001000, 會報內存不足
- 在這個對話框勾選 Reset and Run, 然后點擊 OK 保存
4. 燒錄
經過上面的配置, 應該就可以直接按F8燒錄了
5. Debug
Debug 和普通的 STM32F103 系列一樣, 通過 Keil MDK 的 Debug 菜單可以直接進入.
其他說明
制作soc文件
soc文件其實是一個壓縮文件, 用7zip之類的工具打開后, 可以將其中的app.bin移除, 換成自己的app.bin.
在keil mdk中生成 bin 格式固件
以 Blink 這個項目為例
- 打開項目配置文件 Options for Target ...
- 切換到 User 標簽頁, 在 After Build/Rebuild 下, 勾選 Run #1, 填入要執行的內容, 填入
C:\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe --bin -o .\Objects\Blink.bin .\Objects\Blink.axf
不同的項目, 其相對路徑可能不一樣, 需要自行調整
自建項目, 寫入報 No Algorithm found 錯誤
完整錯誤為
No Algorithm found for: 00000000H - 00001183H
這是因為AIR105的 __ROM_BASE 與標准的 ARMCM4 不一樣, 需要修改項目中的 ARMCM4_ac6.sct 文件, 按下面的數值調整
#define __ROM_BASE 0x01001000
#define __ROM_SIZE 0x00080000
#define __RAM_BASE 0x20000000
#define __RAM_SIZE 0x000A0000
#define __STACK_SIZE 0x00000200
#define __HEAP_SIZE 0x00000C00
參考
- MDK項目示例: https://gitee.com/iosetting/air105_project
- MDK項目示例(W5500), 上面的項目, 驅動部分代碼來源於此 https://github.com/Wiznet-ShenZhen/MH1903SEVB_Routine
- 合宙項目中的SDK部分 https://gitee.com/openLuat/luatos-soc-air105/tree/master/bsp/air105
- 對比MDK項目示例的 Drivers/Air105_StdPeriph_Driver/inc 部分, 和 luatos-soc-air105/bsp/air105/chip/include 部分, 代碼基本是一樣的
- luatos-soc-air105 並沒有使用 bsp/air105/chip/include 的代碼, 而是另外寫了一套位於 bsp/air105/hal 目錄