日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

STC8PROG - Linux下的 STC8G STC8H 烧录工具

發(fā)布時間:2024/8/1 linux 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STC8PROG - Linux下的 STC8G STC8H 烧录工具 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

動機

在Linux下用 VSCode + PlatformIO 做開發(fā), 因為VSCode的界面字體代碼提示, 以及自定義的類JetBrain風格快捷鍵, 開發(fā)體驗非常好. 在這個環(huán)境下, 有兩個基礎(chǔ)工具鏈必不可少, 一個是SDCC, 另一個是stcgal. 前者是MCS-51的編譯工具, 后者是用于STC系列MCU的燒錄工具. 在前一陣開始使用STC8后, stcgal這個工具鏈掉鏈子了, 無法燒錄STC8系列的芯片. 進一步了解后發(fā)現(xiàn)的幾個問題:

PlatformIO 的 MCS-51 Platform 停止更新

PlatformIO 項目是活躍的, 但是這個平臺模塊子項目處于停滯狀態(tài), 項目地址 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也一直未合并. 也許作者已經(jīng)放棄這個項目了. 這才是真正的問題, 因為沒有其它可以在Linux下燒錄這些STC8芯片的替代品. 所以后面幾個月, 要寫只能在Windows下用Keil MDK寫, 太難用了.

成因

一周前我應(yīng)該是不會去寫的, 因為STC沒公開協(xié)議, 如果自己通過邏輯分析儀去反向, 要花的時間沒法估計, 加上對串口通信也不熟悉, 所以一直沒有想法. 但是最近遇到的兩個項目使得這件事可行了.

  • w80xprog John-sanpe/w80xprog, 這是一個C語言寫的, Linux下的W806燒錄工具, 使用termios做串口通信, 代碼風格不錯, 可以作為串口編程的參考.
  • stc.ninja aguegu/stc.ninja, 一個JS單頁應(yīng)用, 做STC8G/STC8H的串口燒錄, 很遺憾這并不是開源項目, 但是在項目主頁stc.ninja/上提供了一個信息, “Thankfully, there is a code sample for flash programming on STC8H datasheet, Page 978”, 現(xiàn)在看到的手冊應(yīng)該已經(jīng)更新過了, 實際頁碼對應(yīng)不上, 但是可以確定是STC8H手冊的附錄N"使用第三方 MCU 對 STC8H 系列單片機
    進行 ISP 下載范例程序", 里面提供了完整的C代碼, 用于實現(xiàn)STC MCU去燒錄STC MCU, 這里面提供了啟動握手, 切換波特率和燒錄部分的協(xié)議細節(jié). 雖然還缺乏信息解析和硬件設(shè)置的協(xié)議部分, 但是用于實現(xiàn)一個燒錄過程足夠了.

行動

  • 12月22日, 下午做了一些驗證, 通過termios走通了啟動響應(yīng), 但是設(shè)置波特率這步一直沒成功
  • 12月23日, 上邏輯分析儀, 解決了昨天的問題, 因為串口設(shè)置要增加偶校驗位, 后面又解決了0D被轉(zhuǎn)換為0A導致校驗失敗的問題, 也是串口的屬性配置. 還遇到了一個FF被接收為兩個FF的問題, 這個在重新拔插USB2TTL后就消失了, 太坑人了. 在晚上出去同學聚會前, 已經(jīng)將寫入搞定了, 但是程序沒跑起來, 和正確的流程比對了一下, 字節(jié)全部不對, 才發(fā)現(xiàn)還有一個HEX到BIN的轉(zhuǎn)換問題. 晚上回來, 把這部分也改好了.
  • 12月24日, 對能找到的STC15和STC8系列都做了測試, 遇到了0x13字節(jié)消失的情況, 還是串口屬性配置的問題, 需要關(guān)閉流控. 之后就是無聊且費時的掃尾工作, 整理代碼, 美化輸出, 整理文檔, 建倉庫, 包括寫這篇記錄.
  • 12月26日, 增加了STC型號數(shù)據(jù)庫(從stcgal導出并加上stc8g, stc8h手冊上的新型號), 優(yōu)化代碼結(jié)構(gòu), 增加了對STC8A/STC8C/STC8F系列的支持

結(jié)果

在Ubuntu20.04下測試的, 理論上支持所有X86 64位的Linux環(huán)境, 經(jīng)過測試可用的型號: STC8G1K08A, STC8H1K08, STC8H3K32S2, STC8H3K64S4, STC8A8K64D4, 測試失敗的型號: STC15F60S2, 不過這個是stcgal能支持的

代碼已經(jīng)上傳, 可以自行編譯, 也可以直接下載二進制可執(zhí)行文件

  • GitHub stc8prog
  • Gitee stc8prog

使用

燒錄時需要對MCU重新加電, 過程和stcgal, 以及Windows下的stc-isp工具是一樣的. 使用中不需要指定芯片類型, 會自動檢測.

參數(shù)列表

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

可以使用參數(shù)-s指定其它的波特率(必須在可選的波特率列表里)

# 2400 baud -> 1152000 baud ./stc8prog -p /dev/ttyUSB0 -s 1152000

擦除

擦除整塊MCU

./stc8prog -p /dev/ttyUSB0 -e

燒錄

建議在燒錄時帶上擦除參數(shù)

./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

  • 在下面新建一個目錄 tool-stc8prog
  • 將可執(zhí)行文件 stc8prog 復制到這個目錄下
  • 2. 配置 platformio.ini

    在項目的platformio.ini中新建一個env, 可以用現(xiàn)有的env復制創(chuàng)建, 修改upload為custom, 并增加對應(yīng)的配置參數(shù), 下面是一個例子

    [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

    如果需要將其設(shè)置為默認, 在 default_envs 中設(shè)置

    [platformio] default_envs = stc8h3k32s2-stc8prog

    更多說明和配置項請參考文檔 platformio section_env_upload

    3. 運行并查看詳細輸出

    以上面的stc8h3k32s2-stc8prog為例, 先執(zhí)行編譯生成hex,

  • 點擊左側(cè)導航欄中PlatformIO的圖標
  • 在PROJECT TASKS中, 點擊展開stc8h3k32s2-stc8prog
  • 在里面點擊展開 Advanced
  • 點擊 Verbose Upload, 這樣會輸出完整的命令行信息
  • 如果燒錄沒問題, 之后就可以直接用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

    從源碼構(gòu)建

    安裝 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授權(quán), 雖然軟件并不修改硬件參數(shù), 燒錄使MCU變磚的概率極小, 但不專業(yè)的操作以及各種意外情況依然存在變磚或者冒煙的可能性, 所以請謹慎操作, 本人不對閱讀及使用此軟件造成的任何直接的或間接的權(quán)益損害負責.

    更新

    • 2021-12-26: STC8A8K64S4A12 的燒錄也已經(jīng)通過. 增加了對STC8A, STC8F, STC8C 系列的支持.
    • 2022-01-12: 增加對MCU固件版本和頻率的顯示, 增加對STC15部分芯片型號的燒錄支持

    總結(jié)

    以上是生活随笔為你收集整理的STC8PROG - Linux下的 STC8G STC8H 烧录工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。