MicroPython Firmware Flashing for STM32
การติดตั้งไฟล์เฟิร์มแวร์ของไมโครไพธอนสำหรับบอร์ดไมโครคอนโทรลเลอร์ STM32
ขั้นตอนการดำเนินการสำหรับบอร์ด STM32
ถ้าใช้บอร์ด WeAct STM32F411CEU6 (Black Pill) ให้ดาวน์โหลดและติดตั้งไฟล์ MicroPython Firmware (pre-built binary file) จาก Github ซึ่งมีประเภทของไฟล์ให้เลือก เช่น .hex หรือ .dfu และยังจำแนกตามรูปแบบการใช้หน่วยความจำ Flash
กรณีที่ใช้เฉพาะ Internal Flash (ไม่มี External SPI Flash Chip)
กรณีที่ใช้ External SPI Flash 4MB
กรณีที่ใช้ External SPI Flash 8MB
ถ้าใช้บอร์ด STM32 Nucleo หรือ Discovery ให้ดาวน์โหลดไฟล์ .dfu ได้จาก https://micropython.org/download/stm32/
Windows: ให้ดาวน์โหลดซอฟต์แวร์ของบริษัท STMicroelectronics แล้วติดตั้งในระบบให้พร้อมใช้งาน (มีขั้นตอนการรีจิสเตอร์ผู้ใช้ก่อน จึงจะสามารถดาวน์โหลดไฟล์จากเว็บไซต์ของทางบริษัทได้) มีอยู่ 3 ตัวเลือกดังนี้
โปรแกรม STM32 ST-Link Utility ถ้าใช้วิธีโปรแกรมผ่าน SWD (วิธีที่ 1) หรือ
โปรแกรม DfuSe ถ้าโปรแกรมด้วยวิธี DFU (วิธีที่ 2) หรือ
โปรแกรม STM32CubeProgrammer (ได้ทั้งวิธีที่ 1 และ 2) <= แนะนำให้เลือกใช้ตัวเลือกนี้ และโปรแกรมสามารถใช้ได้ทั้งกับ Windows และ Linux
โปรแกรม dfu-util for Windows เช่น dfu-util-0.9-win64.zip
Linux (Ubuntu, Raspbian OS): ให้ติดตั้งโปรแกรม เช่น openocd, stlink-tools และ dfu-util เพื่อเอาไว้ใช้งาน
ข้อสังเกต: ถ้าใช้บอร์ด STM32 Nucleo หรือ Discovery การแฟลชเฟิร์มแวร์ (Firmware Flashing) สามารถทำได้ง่าย เนื่องจากเมื่อเสียบสาย USB กับคอมพิวเตอร์ จะมองเห็น Virtual Drive (USB Mass Storage) ผู้ใช้สามารถลากไฟล์ .bin ไปวางใส่ได้เลย (Drag & Drop)
การโปรแกรมด้วยวิธี SWD สำหรับ Windows
ถ้ามีอุปกรณ์ ST-Link/V2 สำหรับการโปรแกรมด้วยวิธี SWD ก็สามารถใช้ไฟล์ .hex ได้เลย ในเครื่องคอมพิวเตอร์ (Windows) จะต้องมีการติดตั้งโปรแกรม STM32 ST-Link Utility ไว้แล้ว
STM32 (SWD) | ST-Link/V2
GND <----------> GND
SCK <----------> SWCLK
DIO <----------> SWDIO
3V3 <----------> 3.3V
การเชื่อมต่อด้วยวิธี SWD จะใช้สายไฟเชื่อมต่อ 4 เส้น ระหว่างบอร์ด STM32 กับอุปกรณ์ ST-Link V2
เมื่อเชื่อมต่อกับบอร์ด STM32 ผ่านทาง ST-Link V2 USB กับคอมพิวเตอร์ได้แล้ว ให้เปิดโปรแกรม STM32 ST-Link Utility จากนั้นไปที่เมนู Target > Connect ถ้าสามารถเชื่อมต่อได้ จะปรากฏข้อความระบุ Device ที่ตรวจพบ
ถัดไปให้เปิดไฟล์ .hex โดยทำคำสั่งจากเมนู File > Open File แล้วเลือกไฟล์ .hex ที่ต้องการจะโปรแกรมไปยังบอร์ดไมโครคอนโทรลเลอร์ จากนั้นทำขั้นตอน Target > Program & Verify (หรืออาจทำขั้นตอน Erase Chip ก่อนก็ได้ เพื่อเคลียร์หน่วยความจำ Flash ทั้งหมด)
การโปรแกรมด้วยวิธี DFU สำหรับ Windows
เมื่อได้ติดตั้งโปรแกรมชื่อ DfuSe ไว้สำหรับการอัปโหลดไฟล์เฟิร์มแวร์ด้วยวิธี DFU (USB device firmware upgrade) ถัดไปให้เตรียมอุปกรณ์ฮาร์ดแวร์ดังนี้ (ในกรณีที่ใช้บอร์ด WeAct STM32F411CEU6)
เชื่อมต่อขา A10 (PA0/USB_FS_ID) ด้วยสาย Jumper Wire กับตัวต้านทาน 10k แบบ Pullup ไปยัง 3.3V
เสียบสาย USB-C เชื่อมต่อบอร์ดไมโครคอนโทรลเลอร์กับคอมพิวเตอร์
กดปุ่ม BOOT0 กดค้างไว้ กดปุ่ม RESET แล้วจึงปล่อยปุ่ม RESET และ BOOT0 ตามลำดับ
ถ้าต้องการจะแปลงไฟล์ .hex เป็น .dfu ก็ให้ใช้โปรแกรมชื่อ DFU File Manager ของ DfuSe โดยกดปุ่ม "S19 or Hex" แล้วเลือกไฟล์ .hex ตามด้วยการกดปุ่ม Generate
ถัดไปให้เปิดโปรแกรม DfuSe Demo ถ้าเชื่อมต่อบอร์ด STM32 แล้วอยู่ในโหมด DFU จะมองเห็น Vendor ID: 0483, Product ID: DF11 และ Version: 2200
กดปุ่ม Choose… ในส่วนของ Upgrade or Verify Action เลือกไฟล์ .dfu แล้วกดปุ่ม Upgrade เพื่อทำขั้นตอนสุดท้าย
ตัวอย่างสำหรับบอร์ด STM32F405 (เข้าสู่ DFU USB Bootloader โดยต่อสายที่ขา BOOT0 กับ 3.3V แล้วกดปุ่มรีเซต) และเลือก MicroPython Firmware: "Firmware for hand-made PYBv3 board"
ปัญหาที่พบ
ถ้าได้ติดตั้งโปรแกรม DfuSe และ STM32CubeProgrammer ของบริษัท STMicroelectronics สำหรับ Windows 10 จะต้องเลือกใช้ USB Driver ให้ถูกต้อง
ลองใช้โปรแกรม USB Driver Tool ตรวจสอบรายการ USB Drivers ในระบบ (หรือเปลี่ยนตัวเลือก)
การใช้งาน STM32CubeProgrammer สำหรับ Windows
เราสามารถใช้ซอฟต์แวร์ STM32CubeProgrammer ซึ่งรองรับการใช้งานได้ทั้ง SWD (ใช้ร่วมกับ ST-Link V2) และ DFU (USB) และเลือกใช้ไฟล์ .hex ได้เลย (ไม่ต้องแปลงเป็น .dfu)
การใช้งานโปรแกรมนี้ ก็ทำได้ง่าย เช่น เลือกใช้ ST-Link แล้วก็เชื่อมต่อกับบอร์ดไมโครคอนโทรลเลอร์ (Connect) จากนั้นเลือกไฟล์ .hex (Open File) แล้วก็กดปุ่ม Download เพื่อเขียนข้อมูลไปยังอุปกรณ์เป้าหมาย
เมื่อติดตั้งเฟิร์มแวร์สำหรับไมโครไพธอนได้สำเร็จแล้ว และนำบอร์ด STM32F411CEU6 ไปเชื่อมต่อเข้ากับพอร์ต USB ของคอมพิวเตอร์ (ใช้สาย USB Type-C) จะมองเห็นไดร์ฟชื่อ STM32F411CE
การใช้โปรแกรม stlink-tools สำหรับ Linux
ตัวอย่างการทำคำสั่งต่อไปนี้ ได้ทดลองใช้กับ Raspbian OS สำหรับบอร์ด Raspberry Pi 4 แต่ก็นำไปใช้กับคอมพิวเตอร์ที่ทำงานด้วย Linux Ubuntu ได้เหมือนกัน
เริ่มต้นด้วยทำคำสั่งติดตั้งโปรแกรมนี้
$ sudo apt-get install stlink-tools
จากนั้นให้เชื่อมต่ออุปกรณ์ ST-Link V2 กับบอร์ด STM32F411CEU6 และพอร์ต USB ของคอมพิวเตอร์ แล้วทำคำสั่งต่อไปนี้ เพื่อลบข้อมูลทั้งหมดในหน่วยความจำ Flash (Full Chip Erase) และเขียนไฟล์ .hex ไปยังอุปกรณ์ ตามลำดับ
$ st-flash erase
$ st-flash --reset write firmware_internal_rom_stm32f411_v1.12-540.hex 0x8000000
การใช้โปรแกรม dfu-util สำหรับ Linux
ตัวอย่างการทำคำสั่งต่อไปนี้ ได้ทดลองใช้กับ Raspbian OS สำหรับบอร์ด Raspberry Pi 4 แต่ก็สามารถนำไปใช้กับคอมพิวเตอร์ที่ทำงานด้วย Linux Ubuntu ได้เหมือนกัน
เริ่มต้นด้วยการทำให้บอร์ด STM32 เข้าโหมด DFU Bootloader Mode ก่อน จากนั้นจึงทำคำสั่งดังต่อไปนี้ เพื่อติดตั้งโปรแกรม แล้วจึงตรวจสอบดูว่า สามารถมองเห็นอุปกรณ์ในโหมด DFU หรือไม่
$ sudo apt-get install dfu-util
$ dfu-util -d 0483:df11 -l
จากนั้นให้ทำคำสั่งเพื่อเขียนไฟล์ .dfu ไปยังหน่วยความจำ Flash ภายในชิป STM32 (ในตัวอยางนี้ได้ดาวน์โหลดไฟล์ .dfu ที่เป็นเฟิร์มแวร์ของไมโครไพธอนเวอร์ชัน v1.12 สำหรับบอร์ด WeAct STM32F411CEU6 มายังคอมพิวเตอร์ของผู้ใช้แล้ว)
$ dfu-util -a 0 -D ./firmware_internal_rom_stm32f411_v1.12-540.dfu
การใช้โปรแกรม OpenOCD สำหรับ Linux
โปรแกรม openocd รองรับการใช้งานอุปกรณ์ ST-LINK V2 เราจะมาลองใช้งานเป็นตัวอย่าง ตัวอย่างการทำคำสั่งต่อไปนี้ ได้ทดลองใช้กับ Raspbian OS สำหรับบอร์ด Raspberry Pi 4 แต่ก็สามารถนำไปใช้กับคอมพิวเตอร์ที่ทำงานด้วย Linux Ubuntu ได้เหมือนกัน
เริ่มต้นด้วยการติดตั้งใช้งานโปรแกรมนี้ก่อน
$ sudo apt-get install openocd libftdi-dev
ถัดไปให้สร้างไฟล์ ./target_stm32f4.cfg ซึ่งเป็นการตั้งค่าการใช้งาน (OpenOCD Configuration Settings) ดังนี้
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f4x.cfg]
telnet_port disabled
gdb_port disabled
reset_config none separate
adapter speed 980
เชื่อมต่ออุปกรณ์ให้พร้อม จากนั้นทำคำสั่งเพื่อลบข้อมูลในหน่วยความจำ Flash ของอุปกรณ์เป้าหมาย โดยทำคำสั่งดังนี้
$ openocd -f ./target_stm32f4.cfg \
-c "init" -c "reset init" \
-c "stm32f2x unlock 0; reset halt" \
-c "flash erase_sector 0 0 last" \
-c "reset" -c "shutdown"
คำสั่งถัดไปคือ การเขียนข้อมูลจากไฟล์เฟิร์มแวร์ไปยังอุปกรณ์เป้าหมาย
$ export FIRMWARE=./firmware_internal_rom_stm32f411_v1.12-540.hex
$ openocd -f ./target_stm32f4.cfg \
-c "init" -c "reset init" \
-c "program $FIRMWARE verify 0x8000000" \
-c "reset" -c "exit"
กล่าวสรุป
เราได้เห็นวิธีการและเครื่องมือประเภทซอฟต์แวร์ต่าง ๆ ที่เป็นตัวเลือกสำหรับการติดตั้งเฟิร์มแวร์ของไมโครไพธอน เพื่อให้ใช้ได้งานกับบอร์ดไมโครคอนโทรลเลอร์ STM32 เช่น STM32F411CEU6
เมื่อได้ติดตั้งเฟิร์มแวร์สำหรับไมโครไพธอนได้แล้ว ถัดไปก็สามารถลองใช้โปรแกรมอย่างเช่น Thonny IDE เชื่อมต่อไปยังบอร์ดไมโครคอนโทรลเลอร์ และทดลองเขียนโค้ดตามตัวอย่างในเนื้อหาถัดไป
เผยแพร่ภายใต้ลิขสิทธิ์ Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
Last updated