在之前發布的<<零基礎快速上手STM32MP1>>一文中,我們獲悉了如何借助STM32CubeProgrammer,輕松將STM32MP1開發板跑起來。在STM32MP1開發板跑起來之后,我們相當于有了一臺微型嵌入式PC,可以支持多種交互方式,例如接入鼠標、鍵盤、串口終端、以太網、支持HDMI的投影儀以及電視機等等。
但是,有個問題,對于開發人員,有沒有高效、簡潔的方法來在Windows和STM32MP1之間建立TCP/IP連接?例如,如果我們已經在Windows上編譯出了Cortex-M4固件,或者自己編寫了一些python腳本,那么我們如何方便的將這些文件復制到STM32MP1上進行調試呢?使用U盤,肯定沒有問題,但需要U盤拔來拔去;使用以太網接口,也沒有問題。現在我們介紹一種基于USB物理線纜的以太網連接。
只需要一根USB線,復用之前的DFU固件下載接口,我們將Windows主機與STM32MP1連接起來構成TCP/IP網絡。本文介紹了基于STM32MP1的便捷網絡配置,能夠提高開發STM32MP1的工作效率。無論你是否擁有Linux環境,也無論你是否擁有Linux開發經驗,本文都適合你閱讀。
STM32MP157C-DK2
開發板環境簡介
本文案例使用STM32MP157C-DK2開發板。如果你手中的是其他類型的STM32MP1官方開發板,例如STM32MP157C-EV1,USB Ethernet gadget操作并沒有什么不同。
ethernet gadget的USB接口就是在DFU模式用來下載固件的USB接口(如下圖右側)。
本文同時認為你已經按照<<零基礎快速上手STM32MP1>>(點擊藍字可查看相應文章)所介紹的方法,正常燒錄了STM32MP1 Starter 開發包,并啟動了開發板如下:
USB ethernet gadget在STM32MP1上的配置
Windows串口終端的配置
如果你使用Teraterm,選擇new connection,端口會自動顯示。直接選擇就可以了,如下圖示。
在setup->Serial port…中選擇波特率設置如下:
顯示ethernet gadget的配置
在串口終端敲入ifconfig命令,我們可以看到開發板所有的網絡接口,其中eth0是以太網口,usb0就是我們這里所關注的USB ethernet gadget。我們可以看到STM32MP1 Starter開發包已經自動將usb0當成以太網卡使用,同時也將IP固定為192.168.7.2。我們對STM32MP1并不需要什么額外的配置,感覺相當方便。
Windows上配置網絡參數并測試TCP/IP連接
將開發板連接到Windows(我們這里使用的是Win10),我們可以在【控制面板】→【網絡和因特網】→【網絡連接】界面下看到:多了一個Remote NDIS網絡接口,如下所示:
我們選中Remote NDIS網卡,右鍵選擇屬性Properties,配置網絡地址為192.168.7.90(或者其它地址,注意不要和192.168.7.2重復)
現在就可以打開Windows命令行,執行ping命令可以看到Windows和STM32MP1已經連通。
TCP/IP連接應用
有了TCP/IP連接,我們就可以做很多應用。例如,我們可以使用它來復制文件或者登陸到設備上去;我們需要用到scp和ssh命令。
支持scp和ssh命令的Windows軟件
有多個軟件提供scp和ssh命令。一個最簡單的選擇是Git for windows提供的命令行環境Git-bash。Git for windows可以從https://gitforwindows.org/下載安裝。安裝完成后,點擊git-bash圖標,就進入了命令行環境。你也可以選擇Windows Subsystem Linux(WSL),安裝也非常簡單。
在STM32MP1與Windows之間復制文件
假設我們希望將c:\mcu\my.py復制到STM32MP1上/home/root目錄,則使用scp命令如下:
效果如下:
第一次會提示是否接受對方主機的公鑰,當然選yes。
假設我們希望將STM32MP1上的 /home/root/my.py 復制到c:\mcu目錄,則使用scp命令如下:
效果如下:
從Windows上ssh連接STM32MP1
使用ssh連接開發板命令如下:
第一次會提示是否接受對方主機的公鑰,當然選yes。
連接成功后,我們可以不再需要ST-Link連接的串口終端,而直接使用ssh的網絡終端輸入命令。 例如,我們可以查看剛才復制的文件,效果如下:
注意
在使用ssh命令時有時候它會提示
這個時候你可以使用命令vim,在命令行界面里打開~/.ssh/known_hosts刪除改IP地址所對應的行就可以了。
也可以用其他編輯器訪問C:\Users\xxx(你的用戶名)\.ssh\known_hosts刪除所對應的行。
總結
TCP/IP連接對開發過程很重要,它的作用不限于復制文件。本文使用開發人員熟悉的Windows系統,展示了使用STM32MP1 USB ethernet gadget在Windows和STM32MP1建立TCP/IP連接的方案。我們可以看到USB ethernet gadget配置簡單,使用起來節省開發時間,值得我們在STM32MP1的開發中采用。
采用Linux PC作為開發環境的讀者,同樣可以使用STM32MP1 USB ethernet gadget功能。你需要使用ifconfig命令配置Linux PC識別到的USB網卡,然后就可以使用scp等命令進行文件復制操作。