)
手里有一臺VESC電調(diào)想用VESC-Tool升級固件或者把刷磚的板子救回來結(jié)果軟件里反復(fù)顯示連接超時想直接上SWD接好杜邦線又彈出一個SWD/JTAG Communication Failure。這個場景我自己也經(jīng)歷過不止一次。VESC這個開源電調(diào)在國內(nèi)玩電動滑板、電動沖浪板、DIY機器人的圈子里已經(jīng)不算新鮮但它那套“刷固件”的流程很多新手上手時還是容易卡殼尤其是一旦Bootloader出問題就只能靠SWD硬救。這篇就把我從正常刷寫、到SWD救磚、再到各種接線坑的完整過程寫下來希望能幫你少走幾趟彎路。1. 先搞清楚VESC電調(diào)刷的是什么、為什么要刷1.1 VESC電調(diào)的核心硬件與固件分工VESC全稱是Vedder ESC最早由Benjamin Vedder設(shè)計并開源。它本質(zhì)上是一塊基于STM32處理器的高性能無刷電調(diào)常見主控芯片是STM32F405或STM32F407功率部分用DRV8301/DRV8302這類柵極驅(qū)動芯片加外部MOSFET橋臂來實現(xiàn)。跟普通航模電調(diào)最大的區(qū)別在于VESC可以做真正的FOC矢量控制電流控制精度高、低速扭矩大、剎車線性好而且全部參數(shù)都能通過上位機調(diào)節(jié)。板子上“固件”這個概念要拆成兩層看一層是Bootloader負(fù)責(zé)啟動引導(dǎo)和底層升級另一層是Application固件也就是日常運行電機控制算法的部分。VESC-Tool升級固件時本質(zhì)上是先把應(yīng)用層固件通過Bootloader寫進Flash再由新的應(yīng)用固件接手后續(xù)工作。如果Bootloader被覆蓋或者損壞設(shè)備就會變“磚”這時候只能走芯片的SWD調(diào)試接口繞過所有軟硬件邏輯直接操作Flash。很多人第一次聽到“刷固件”以為特別危險其實理解了這個分工之后就順了升級成功功能增強升級失敗通常也只是應(yīng)用層壞了Bootloader還在重新刷就行。最怕的是刷到一半斷電、選了錯誤的硬件類型、或者手癢把Bootloader區(qū)域也擦掉那就必須動SWD了。1.2 哪些情況需要自己刷固件正常使用中你并不需要經(jīng)常刷VESC。但以下幾種情況基本繞不開拿到一塊二手或庫存板子固件版本太老VESC-Tool已經(jīng)不支持必須升級。換了不同廠商的第三方硬件比如國產(chǎn)MKS、ESCape、或者自己焊的“便宜VESC”需要刷對應(yīng)固件才能讓功能和硬件匹配。官方發(fā)布了新版本修復(fù)了FOC檢測、CAN通訊或者電流采樣相關(guān)的bug。板子的Bootloader被別人刷花或者你自己在實驗配置時把參數(shù)弄亂想要徹底重置。需要通過SWD檢查芯片是否被設(shè)置讀保護順便做一次全片擦除。如果你只是用原裝VESC配官方電機那確實可以一直不刷。但玩到后面想要接藍(lán)牙模塊、做遙控器配置、調(diào)再生制動強度甚至讓多塊VESC通過CAN總線聯(lián)動新固件的支持度就很重要了。1.3 VESC-Tool在整套流程里的角色VESC-Tool是官方上位機軟件跨平臺支持Windows、macOS、Linux界面里能完成的事情非常多固件升級、實時示波器、FOC電機檢測、遙控器配置、藍(lán)牙模塊設(shè)置、CAN總線管理、參數(shù)備份恢復(fù)等等。對于刷固件這件事VESC-Tool最方便的地方是可以直接在軟件里下載固件、選擇硬件配置、一鍵上傳基本不需要懂底層命令行。不過VESC-Tool再方便它也得依賴正常工作的USB通訊和Bootloader。一旦Bootloader沒了、芯片被鎖了、或者USB物理口損壞VESC-Tool就使不上勁了這時候SWD是最后也是最有效的救援通道。所以我一般會把VESC-Tool當(dāng)成日常工具把SWD當(dāng)成“手術(shù)臺”兩者結(jié)合著用才最穩(wěn)。2. 刷固件前的準(zhǔn)備工作軟件、驅(qū)動、硬件連接2.1 安裝VESC-Tool與虛擬串口驅(qū)動VESC-Tool官方版本可以從官網(wǎng)下載也可以從項目官網(wǎng)的下載頁拿對應(yīng)系統(tǒng)安裝包。安裝過程不復(fù)雜Windows用戶一路下一步即可。比較關(guān)鍵的是驅(qū)動VESC板上的USB口通常走的STM32虛擬串口Windows下第一次插入電腦可能會識別成未知設(shè)備需要先裝ST官方VCP驅(qū)動裝完后設(shè)備管理器里會多出一個COM口VESC-Tool就是靠這個COM口跟板子通訊的。Linux和macOS一般不需要額外驅(qū)動插上后系統(tǒng)會自動枚舉為ttyACM或者tty.usbmodem設(shè)備。但如果你用的是某些克隆板USB芯片可能不是原廠方案那就要注意了Windows下用一個叫Zadig的工具把驅(qū)動切換成usbserial或者WinUSB再讓VESC-Tool重新識別。這個操作有點雙刃劍選錯了會導(dǎo)致徹底連不上所以我一般建議先試原廠驅(qū)動不行再考慮Zadig。安裝完成之后先別急著刷固件。打開VESC-Tool用一根數(shù)據(jù)線連接VESC和電腦觀察界面右下角或者連接按鈕附近是否出現(xiàn)COM口。很多莫名其妙的“連不上”問題其實都是線材只有充電功能沒有數(shù)據(jù)通道導(dǎo)致的所以準(zhǔn)備一根確定能傳數(shù)據(jù)的線很重要。2.2 認(rèn)識VESC板上的USB口和SWD引腳不同版本的VESC接口布局不完全一樣。常見VESC 4.12板上有一個Micro-USB口旁邊或者背面會有一排調(diào)試針腳VESC 6系列和很多第三方板子會提供Type-C或者更多的排針。USB口容易找SWD口則需要仔細(xì)看絲印。SWD至少需要四根線SWDIO、SWCLK、GND、3.3V。在VESC板上這些引腳通常被標(biāo)注為DIO、CLK、GND、3V3有的板子會直接寫SWDIO和SWCLK。個別板子還會把TX、RX、RST一起引出來方便做串口調(diào)試。如果你買的板子沒有絲印去找對應(yīng)的原理圖或者淘寶商品詳情頁一般都會有Debug接口定義。拿不準(zhǔn)的情況下最好用萬用表驗證一下GND和3.3V引腳防止接反燒東西。這里要特別提醒VESC的SWD引腳電壓基準(zhǔn)是3.3V調(diào)試器的邏輯電平也必須是3.3V。市面上有些ST-Link仿品或者單片機開發(fā)板引出的調(diào)試接口可能是5V電平直接懟到VESC上會有風(fēng)險。最好用正規(guī)的ST-Link/V2或者支持3.3V電平的DAPLink。2.3 供電順序USB優(yōu)先還是電池優(yōu)先刷固件的時候VESC需不需要接大電池這是新手最容易糾結(jié)的問題。我的建議是只刷固件、不跑電機的情況下優(yōu)先用USB供電斷開電池或者只接低壓電源。原因是刷寫過程屬于低負(fù)載操作VESC板上的穩(wěn)壓器可以靠USB口的5V供電給芯片跑起來不需要電池。如果你同時接了大電池萬一固件寫入后出現(xiàn)異常狀態(tài)功率管有可能瞬間導(dǎo)通輕則電機抖動重則把MOSFET燒掉。尤其是芯片F(xiàn)lash被擦除的瞬間IO口可能處于不定狀態(tài)這時候大電池供電的風(fēng)險會放大。如果板子的USB口不能單獨供電或者你的板子設(shè)計上必須電池給LDO供電那可以考慮接一塊電壓較低的電池比如3S鋰電池但一定記得把電機相線斷開。刷寫過程中看到異常發(fā)熱、冒煙跡象要立刻斷電檢查。我個人的操作習(xí)慣是USB先接入VESC-Tool識別到設(shè)備后再上低壓電源刷寫完成后先關(guān)電源再拔USB順序不要亂。3. 正常刷寫路徑通過USB用VESC-Tool升級固件3.1 連上VESC并識別設(shè)備先把VESC通過USB接到電腦打開VESC-Tool軟件一般會自動掃描可用串口。點擊連接后如果成功界面會顯示出當(dāng)前固件版本、硬件型號以及一組實時參數(shù)。連接不上的時候重點檢查三件事設(shè)備管理器里有沒有COM口、串口是否被其他軟件占用、波特率設(shè)置是不是被改成了固定值。正常情況下波特率保持“Auto/自動”即可不用手動指定。VESC-Tool連接過程本身會先跟Bootloader和應(yīng)用固件握手如果你的Bootloader已經(jīng)損壞USB連接時可能會一直卡在握手階段軟件提示類似“Firmware read failed”。這種情況就別在VESC-Tool里死磕了直接進入后面的SWD章節(jié)處理。識別成功后可以順手點一下“Read Configuration”把當(dāng)前參數(shù)讀出來備份。刷固件前備份參數(shù)是個好習(xí)慣因為有些跨版本升級會把配置結(jié)構(gòu)重置或者自動轉(zhuǎn)換失敗備份了才好恢復(fù)。3.2 選擇正確的硬件型號和固件版本VESC-Tool左側(cè)菜單里找到“Firmware”入口界面會要求選擇硬件類型。這一步非常重要硬件類型選錯固件燒進去輕則功能異常重則引腳配置錯亂、電流采樣不對甚至導(dǎo)致電機運行時炸管。常見的硬件選項有VESC 4.12、VESC 6、VESC 6 MK、以及第三方板子的專用版本。不確定硬件型號時看板子主控絲印、柵極驅(qū)動芯片型號、板子絲印版本號或者問賣家。選好硬件后再從固件版本列表里挑一個目標(biāo)版本。VESC固件版本號常年更新官方會同時維護穩(wěn)定版和測試版。日常使用建議選穩(wěn)定版如果你遇到某個bug需要新固件修復(fù)再考慮測試版。VESC-Tool默認(rèn)會從在線倉庫拉取固件列表如果網(wǎng)絡(luò)環(huán)境或者軟件版本較老導(dǎo)致拉取失敗可以選擇手動加載本地bin文件。點上傳之后VESC-Tool會先把固件傳進芯片然后自動重啟板子整個過程大概十幾秒到幾十秒。中途千萬別拔USB、別斷電也別亂點界面??吹缴蟼鬟M度條走完、板子重新出現(xiàn)在串口列表里就說明刷寫成功了。3.3 刷完固件后必須做的電機檢測和校準(zhǔn)固件刷完不等于萬事大吉。如果只是小版本升級原配置可能還能沿用如果跨了大版本建議把之前的配置重新刷入或者重新跑一遍電機檢測。具體操作是進入“Motor Settings”或者“Motor Wizard”選擇電機類型無刷、有刷、各有感等輸入電機極對數(shù)、額定電流、電池電壓等信息然后讓VESC-Tool執(zhí)行FOC檢測。檢測過程中電機會發(fā)出比較大的聲音屬于正?,F(xiàn)象最好把電機架空別帶負(fù)載。檢測完成后軟件會寫入電機的電阻、電感、磁鏈等參數(shù)再試轉(zhuǎn)一下確認(rèn)方向是否正確。我見過不少朋友刷完固件后電機嗡嗡響、抖動、轉(zhuǎn)不起來多半就是沒有重新做FOC檢測或者檢測時相線接觸不良。記住一個原則換固件、換電機、換線材之后都應(yīng)該重新跑一次電機檢測這比對著參數(shù)表手動摳數(shù)據(jù)靠譜得多。4. Bootloader損壞怎么辦SWD刷寫方式詳解4.1 SWD調(diào)試器選型與接線當(dāng)VESC的Bootloader損壞、配置被改得一塌糊涂或者USB口失靈時SWD就成了唯一的救磚通道。SWD調(diào)試器我推薦三種原廠ST-Link V2便宜量大的DAPLink以及J-Link。ST-Link和DAPLink在VESC圈子里最常見幾十塊錢的夠用。J-Link性能更好但沒必要特意買貴的。接線時找齊四個信號SWDIO、SWCLK、GND、3.3V。有些板子只有四個焊盤沒有排針需要自己焊線。接線順序建議先把GND接好再接SWDIO和SWCLK最后接3.3V。接好之后用萬用表測一下SWDIO/SWCLK對地電壓應(yīng)該能看到3.3V左右如果電壓不對先查供電不要貿(mào)然點連接。如果你用的調(diào)試器是ST-Link V2插上電腦后Windows會自動裝驅(qū)動設(shè)備管理器里能看到一個ST-Link Debug接口。舊版ST-Link可能需要手動安裝驅(qū)動新版多數(shù)可以免驅(qū)。DAPLink在Windows下通常會枚舉成一個串口加一個HID調(diào)試口同樣需要保證驅(qū)動正常。4.2 用OpenOCD命令行刷寫OpenOCD是開源調(diào)試軟件支持ST-Link、DAPLink、J-Link等多種調(diào)試器。用命令行刷寫VESC固件的操作很直接前提是電腦已經(jīng)安裝了OpenOCD。以ST-Link為例基本命令如下openocd -f interface/stlink.cfg \ -f target/stm32f4x.cfg \ -c transport select swd \ -c adapter_khz 1000 \ -c init \ -c reset halt \ -c flash write_image erase vesc.bin 0x08000000 \ -c reset run \ -c shutdown這里有幾個關(guān)鍵點interface/stlink.cfg 是對應(yīng)ST-Link的接口配置文件如果你用DAPLink就換成interface/cmsis-dap.cfg。target/stm32f4x.cfg 對應(yīng)STM32F405/F407內(nèi)核VESC主控基本都是這個家族。adapter_khz 1000 表示把SWD時鐘設(shè)置成1MHz。很多連接失敗的情況把時鐘降一降就好了。0x08000000是STM32 Flash起始地址官方完整固件鏡像一般從這個地址燒起。如果拿到的是單獨的App固件需要按作者說明的偏移地址燒寫不要盲目用默認(rèn)地址。執(zhí)行完命令如果看到類似“wrote 65536 bytes from file vesc.bin”的輸出就說明寫入成功。然后可以斷開調(diào)試器重新用USB連接VESC-Tool驗證。4.3 用STM32CubeProgrammer圖形化刷寫如果你不習(xí)慣命令行可以用ST官方的STM32CubeProgrammer。這個軟件不僅支持圖形化刷寫還能處理讀保護和Flash擦除功能很全。操作流程是打開STM32CubeProgrammer在右側(cè)選擇ST-LINK接口選SWD頻率設(shè)低一點比如1MHz模式選“Under reset”然后點擊Connect。如果連接成功左側(cè)會顯示芯片型號、Flash容量、當(dāng)前讀保護級別等。連接失敗時軟件往往會在日志區(qū)給出類似于“Error: STM32 SWD/JTAG Communication Failure”的提示這是最常見的一條錯誤后面避坑部分專門說。連接之后在“Download”頁面選擇要燒錄的bin文件起始地址填0x08000000勾選“Erase necessary pages”或者“Full chip erase”點擊“Start Programming”即可。燒完以后如果還想把整個系統(tǒng)恢復(fù)到出廠狀態(tài)也可以先用“Full chip erase”把整片F(xiàn)lash清干凈然后再重新燒錄Bootloader和App固件。STM32CubeProgrammer還有一個命令行模式適合批量操作命令大概是這樣STM32_Programmer_CLI.exe -c portSWD modeUR -e all -w vesc.bin 0x08000000 -vmodeUR表示Under reset模式-v是校驗。這條命令適合拿到一塊完全陌生的板子時做一次全片擦除加寫固件整個過程比圖形界面更穩(wěn)定。5. SWD連接避坑指南最容易翻車的幾個地方5.1 SWD/JTAG Communication Failure是怎么來的碰到這個錯誤先別慌它幾乎是每個玩嵌入式的人都會遇到的。產(chǎn)生原因大致分幾類接線錯誤、供電不穩(wěn)、調(diào)試器沒有正確握手、芯片被讀保護鎖住、SWD時鐘太高導(dǎo)致信號質(zhì)量不行。從最基礎(chǔ)開始排查大多數(shù)問題都能解決。我自己的經(jīng)驗是十個Communication Failure里至少有一半是接線問題。SWDIO和SWCLK兩根線接反、杜邦線松脫、GND沒共地都會造成握手失敗。所以看到報錯第一件事不是換軟件版本而是拿萬用表檢查每個引腳的連通性最好重新拔插一遍所有跳線。另一個常見原因是調(diào)試器的3.3V沒有正確輸出或者VESC板上的3.3V電平不穩(wěn)定。如果接線沒問題再考慮供電。很多調(diào)試器號稱能輸出3.3V但電流能力有限而VESC板上的外圍電路加起來可能把電壓拉低。這時候可以給VESC單獨接低壓電源常見做法是給板子通一個3S鋰電池同時斷開電機相線然后讓調(diào)試器和VESC各自供電只用信號線連接。5.2 時鐘頻率、復(fù)位時序與連接順序SWD通訊對時鐘頻率比較敏感尤其當(dāng)杜邦線比較長、排針氧化或者調(diào)試器是廉價仿品時高頻下很容易出現(xiàn)隨機失敗。VESC板布線并不復(fù)雜但用ST-Link V2默認(rèn)頻率去連偶爾也會抽風(fēng)。把頻率從默認(rèn)降到1000kHz甚至500kHz成功率會明顯提升。頻率低一點只是傳輸慢刷幾十KB固件也就多幾秒鐘完全無所謂?!癠nder reset”連接模式也非常有用。STM32在復(fù)位期間SWD訪問權(quán)限是最開放的很多讀保護或者應(yīng)用固件死死占住調(diào)試口的情況用這個模式都能繞過去。操作方法是在STM32CubeProgrammer里選Mode為Under reset然后軟件會控制調(diào)試器拉低復(fù)位腳在芯片剛從復(fù)位狀態(tài)恢復(fù)的瞬間嘗試握手。前提是VESC板上需要有NRST復(fù)位引腳并且連到了調(diào)試器如果板子沒有引出RST這種方法就用不了。連接順序也是我很強調(diào)的一點。推薦“先接調(diào)試器再給VESC上電”或者“GND先接再依次接SWDIO、SWCLK、3.3V”。千萬不要在VESC滿載運行或者電機轉(zhuǎn)動的時候帶電插拔SWD調(diào)試口本身耐壓有限帶電插拔很容易把IO口打壞那就真的只能換芯片了。5.3 讀保護RDP導(dǎo)致的連接失敗與解鎖二手板、翻新板、別人刷壞的板子最容易遇到讀保護問題。STM32芯片支持讀保護Level 0、Level 1、Level 2其中Level 1或更高時SWD/JTAG握手會被限制于是報SWD/JTAG Communication Failure。很多賣家口中的“損壞板”其實只是被設(shè)置了讀保護芯片本身并沒壞。處理方式是用STM32CubeProgrammer連接如果日志提示檢測到讀保護或者“Device is busy”可以先嘗試Under reset模式連接。連接成功后在“Option Bytes”或“Read Out Protection”設(shè)置里把RDP從Level 1改成Level 0并執(zhí)行。執(zhí)行時會觸發(fā)全片擦除也就是說芯片里的固件、參數(shù)、校準(zhǔn)數(shù)據(jù)都會清空這是繞開保護的必要代價。如果芯片被設(shè)置為Level 2那就麻煩了因為Level 2下調(diào)試口會被永久禁用STM32CubeProgrammer也救不回來。所以買二手VESC時我習(xí)慣先確認(rèn)讀保護級別盡量買“可以解鎖”的板子別碰Level 2的。自己使用時也別手賤去設(shè)Level 2VESC根本用不到這個級別。6. 刷固件過程中的常見問題與排查速查表6.1 電腦識別不到USB設(shè)備這個問題在我?guī)团笥烟幚鞻ESC時出現(xiàn)頻率最高?,F(xiàn)象是插上USB后電腦毫無反應(yīng)或者提示未知USB設(shè)備。優(yōu)先換一根確定能傳數(shù)據(jù)的數(shù)據(jù)線然后查設(shè)備管理器看是否需要裝ST的VCP驅(qū)動如果裝了驅(qū)動還是未知設(shè)備再考慮用Zadig切換驅(qū)動。部分國產(chǎn)克隆VESC的USB走線設(shè)計比較一般對線材質(zhì)量很敏感有時候換一根短一點的線就好了。如果USB口徹底沒反應(yīng)那就要檢查板子的3.3V和5V是否正常芯片是否還在工作。這時候可以試著用SWD連接看看能不能讀到芯片信息能讀到說明主控活的只是USB外圍有問題。6.2 FOC檢測不過、電機抖動或者不轉(zhuǎn)刷完固件后電機檢測失敗太常見了。常見原因包括電機相線接觸不良、電調(diào)與電機功率不匹配、檢測電流設(shè)置太低、電池電壓過低等。FOC檢測實際上是通過施加特定電壓、測量電流響應(yīng)來估算電機參數(shù)如果接觸電阻大、電壓波動大結(jié)果自然不準(zhǔn)。處理方法是先把相線重新壓緊確認(rèn)三根相線沒有短路或斷路然后適當(dāng)提高檢測電流上限一般建議10A到20A之間確保供電電壓穩(wěn)定不要用嚴(yán)重虧電的電池最后在電機懸空狀態(tài)下再跑一次檢測。如果檢測始終失敗可以把電機換成已知正常的電機做交叉驗證判斷問題在電調(diào)還是電機。6.3 固件版本和VESC-Tool不匹配有時候VESC能連上但VESC-Tool提示固件版本太舊不支持當(dāng)前上位機操作。這個現(xiàn)象不是設(shè)備壞了只是協(xié)議版本跨度太大。處理方法有兩種一是先用舊版本的VESC-Tool連接再把固件升級到軟件支持范圍內(nèi)的版本二是用SWD方式直接刷入新固件鏡像跳過老固件和上位機之間的兼容問題?,F(xiàn)象常見原因處理方法USB插入無反應(yīng)數(shù)據(jù)線不通、驅(qū)動缺失換線、裝VCP驅(qū)動連接后提示固件太舊Bootloader/App版本過老用SWD寫入新固件SWD連接報Communication Failure接線錯誤、時鐘過高、RDP保護檢查接線、降頻、Under reset刷寫進度條卡住接觸不良、供電不穩(wěn)不要斷電重插USB后重試FOC檢測失敗相線接觸不良、電流限制低壓緊相線、提高電流、懸空測試最后再分享一個我自己的習(xí)慣拿到一塊二手VESC的第一件事不是先接電機而是先用ST-Link把讀保護狀態(tài)和固件版本查一遍確認(rèn)Bootloader還能正常響應(yīng)。很多高價收來的“問題板”其實就是RDP被設(shè)了Level 1或者Bootloader被刷亂用SWD擦掉重刷一遍就能滿血復(fù)活。只要SWD接口的四個引腳沒燒壞這塊板子基本都有救。希望這篇能幫你在刷固件的路上少交點學(xué)費。