STC8PROG - Linux下的 STC8G STC8H 烧录工具
動機
在Linux下用 VSCode + PlatformIO 做開發, 因為VSCode的界面字體代碼提示, 以及自定義的類JetBrain風格快捷鍵, 開發體驗非常好. 在這個環境下, 有兩個基礎工具鏈必不可少, 一個是SDCC, 另一個是stcgal. 前者是MCS-51的編譯工具, 后者是用于STC系列MCU的燒錄工具. 在前一陣開始使用STC8后, stcgal這個工具鏈掉鏈子了, 無法燒錄STC8系列的芯片. 進一步了解后發現的幾個問題:
PlatformIO 的 MCS-51 Platform 停止更新
PlatformIO 項目是活躍的, 但是這個平臺模塊子項目處于停滯狀態, 項目地址 platformio/platform-intel_mcs51, 可以看到最后一次有效更新在14個月前, PR也一直未合并, pull/41. 在 MCS-51 Platform 上整合的 stcgal 還停留在 1.5 版本, 需要升級到 1.6 版本才能提供 STC8A 的支持. 好在這個問題可以通過手工升級解決, PlatformIO手工升級stcgal到1.6版本. 升級完之后, 可以對 STC8A8K64S4 寫入了.
stcgal 停止更新
stcgal 1.6 只支持 STC8A8K64S4A12 和 STC8F 系列(后者未驗證), 不支持 STC8G,STC8H,STC8A8K64D4系列.
stcgal項目地址 grigorig/stcgal, 可以看到最后一次有效更新在12個月前, PR也一直未合并. 也許作者已經放棄這個項目了. 這才是真正的問題, 因為沒有其它可以在Linux下燒錄這些STC8芯片的替代品. 所以后面幾個月, 要寫只能在Windows下用Keil MDK寫, 太難用了.
成因
一周前我應該是不會去寫的, 因為STC沒公開協議, 如果自己通過邏輯分析儀去反向, 要花的時間沒法估計, 加上對串口通信也不熟悉, 所以一直沒有想法. 但是最近遇到的兩個項目使得這件事可行了.
- w80xprog John-sanpe/w80xprog, 這是一個C語言寫的, Linux下的W806燒錄工具, 使用termios做串口通信, 代碼風格不錯, 可以作為串口編程的參考.
- stc.ninja aguegu/stc.ninja, 一個JS單頁應用, 做STC8G/STC8H的串口燒錄, 很遺憾這并不是開源項目, 但是在項目主頁stc.ninja/上提供了一個信息, “Thankfully, there is a code sample for flash programming on STC8H datasheet, Page 978”, 現在看到的手冊應該已經更新過了, 實際頁碼對應不上, 但是可以確定是STC8H手冊的附錄N"使用第三方 MCU 對 STC8H 系列單片機
進行 ISP 下載范例程序", 里面提供了完整的C代碼, 用于實現STC MCU去燒錄STC MCU, 這里面提供了啟動握手, 切換波特率和燒錄部分的協議細節. 雖然還缺乏信息解析和硬件設置的協議部分, 但是用于實現一個燒錄過程足夠了.
行動
- 12月22日, 下午做了一些驗證, 通過termios走通了啟動響應, 但是設置波特率這步一直沒成功
- 12月23日, 上邏輯分析儀, 解決了昨天的問題, 因為串口設置要增加偶校驗位, 后面又解決了0D被轉換為0A導致校驗失敗的問題, 也是串口的屬性配置. 還遇到了一個FF被接收為兩個FF的問題, 這個在重新拔插USB2TTL后就消失了, 太坑人了. 在晚上出去同學聚會前, 已經將寫入搞定了, 但是程序沒跑起來, 和正確的流程比對了一下, 字節全部不對, 才發現還有一個HEX到BIN的轉換問題. 晚上回來, 把這部分也改好了.
- 12月24日, 對能找到的STC15和STC8系列都做了測試, 遇到了0x13字節消失的情況, 還是串口屬性配置的問題, 需要關閉流控. 之后就是無聊且費時的掃尾工作, 整理代碼, 美化輸出, 整理文檔, 建倉庫, 包括寫這篇記錄.
- 12月26日, 增加了STC型號數據庫(從stcgal導出并加上stc8g, stc8h手冊上的新型號), 優化代碼結構, 增加了對STC8A/STC8C/STC8F系列的支持
結果
在Ubuntu20.04下測試的, 理論上支持所有X86 64位的Linux環境, 經過測試可用的型號: STC8G1K08A, STC8H1K08, STC8H3K32S2, STC8H3K64S4, STC8A8K64D4, 測試失敗的型號: STC15F60S2, 不過這個是stcgal能支持的
代碼已經上傳, 可以自行編譯, 也可以直接下載二進制可執行文件
- GitHub stc8prog
- Gitee stc8prog
使用
燒錄時需要對MCU重新加電, 過程和stcgal, 以及Windows下的stc-isp工具是一樣的. 使用中不需要指定芯片類型, 會自動檢測.
參數列表
Usage: stc8prog [options]...-h, --help display this message-p, --port <device> set device path-s, --speed <baud> set download baudrate-f, --flash <file> flash chip with data from hex file-e, --erase erase the entire chip-d, --debug enable debug output-v, --version display version informationBaudrate options: 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 500000, 576000,921600, 1000000, 1152000, 1500000, 2000000, 2500000, 3000000, 3500000,4000000檢查
與MCU作握手通信, 過程不作任何寫入. 過程中先通過2400波特率握手, 再切換到115200波特率握手
# 2400 baud -> 115200 baud ./stc8prog -p /dev/ttyUSB0可以使用參數-s指定其它的波特率(必須在可選的波特率列表里)
# 2400 baud -> 1152000 baud ./stc8prog -p /dev/ttyUSB0 -s 1152000擦除
擦除整塊MCU
./stc8prog -p /dev/ttyUSB0 -e燒錄
建議在燒錄時帶上擦除參數
./stc8prog -p /dev/ttyUSB0 -e -f foo.hex使用更高的波特率可以加速燒錄
./stc8prog -p /dev/ttyUSB0 -s 1152000 -e -f foo.hex集成到 PlatformIO
1. 添加到 packages 目錄
PlatformIO的packages目錄默認路徑是 /home/[username]/.platformio/packages
2. 配置 platformio.ini
在項目的platformio.ini中新建一個env, 可以用現有的env復制創建, 修改upload為custom, 并增加對應的配置參數, 下面是一個例子
[env:stc8h3k32s2-stc8prog] platform = intel_mcs51 board = stc8h3k32s2 upload_protocol = custom upload_port = /dev/ttyUSB0 upload_flags =-p$UPLOAD_PORT-s1152000-e upload_command = ${platformio.packages_dir}/tool-stc8prog/stc8prog $UPLOAD_FLAGS -f $SOURCE如果需要將其設置為默認, 在 default_envs 中設置
[platformio] default_envs = stc8h3k32s2-stc8prog更多說明和配置項請參考文檔 platformio section_env_upload
3. 運行并查看詳細輸出
以上面的stc8h3k32s2-stc8prog為例, 先執行編譯生成hex,
如果燒錄沒問題, 之后就可以直接用Ctrl+Alt+U快捷鍵啟動默認燒錄.
正常的燒錄輸出
> Executing task in folder stc8h_test002: platformio run --target upload <Processing stc8h3k32s2-stc8prog (platform: intel_mcs51; board: stc8h3k32s2) -------------------------------------------------------------------------------------------------------------------------------------------------------------- Verbose mode can be enabled via `-v, --verbose` option CONFIGURATION: https://docs.platformio.org/page/boards/intel_mcs51/stc8h3k32s2.html PLATFORM: Intel MCS-51 (8051) (1.2.3) > Generic STC8H3K32S2 HARDWARE: STC8H3K32S2 11MHz, 3.25KB RAM, 32KB Flash PACKAGES: - tool-stcgal 1.104.0 (1.4) - toolchain-sdcc 1.30804.10766 (3.8.4) LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf LDF Modes: Finder ~ chain, Compatibility ~ soft Found 1 compatible libraries Scanning dependencies... Dependency Graph |-- <FwLib_STC8> 1.0 Building in release mode Compiling .pio/build/stc8h3k32s2-stc8prog/src/main.rel Compiling .pio/build/stc8h3k32s2-stc8prog/src/uart.rel Linking .pio/build/stc8h3k32s2-stc8prog/firmware.hex Checking size .pio/build/stc8h3k32s2-stc8prog/firmware.hex Advanced Memory Usage is available via "PlatformIO Home > Project Inspect" Flash: [ ] 1.0% (used 328 bytes from 32768 bytes) Configuring upload protocol... AVAILABLE: custom, stcgal CURRENT: upload_protocol = custom Uploading .pio/build/stc8h3k32s2-stc8prog/firmware.hex Loading hex file: Loaded 321 bytes between: 0000 to 0140 Opening port /dev/ttyUSB0: done Waiting for MCU, please cycle power: .......................detected Chip model: STC8A8K64S4A12 Protocol: STC8A/8F Switching to 1152000 baud, chip: set, host: set, ping: succ Erasing chip: done Writing flash, size 321: 0x0 - 0x80 - 0x100 - done ================================================================ [SUCCESS] Took 7.89 secondsEnvironment Status Duration -------------------- -------- ------------ stc8h3k32s2-stc8prog SUCCESS 00:00:07.889 ================================================================ 1 succeeded in 00:00:07.889從源碼構建
安裝 DEV-tools
sudo apt install build-essential檢出項目
# GitHub git clone https://github.com/IOsetting/stc8prog.git # Gitee git clone https://gitee.com/iosetting/stc8prog.git編譯
cd stc8prog make聲明
代碼使用Apache-2.0授權, 雖然軟件并不修改硬件參數, 燒錄使MCU變磚的概率極小, 但不專業的操作以及各種意外情況依然存在變磚或者冒煙的可能性, 所以請謹慎操作, 本人不對閱讀及使用此軟件造成的任何直接的或間接的權益損害負責.
更新
- 2021-12-26: STC8A8K64S4A12 的燒錄也已經通過. 增加了對STC8A, STC8F, STC8C 系列的支持.
- 2022-01-12: 增加對MCU固件版本和頻率的顯示, 增加對STC15部分芯片型號的燒錄支持
總結
以上是生活随笔為你收集整理的STC8PROG - Linux下的 STC8G STC8H 烧录工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 轻量却超强——推荐几款好用的截图工具(1
- 下一篇: 台达变频器485通讯接线图_台达变频器R