วิธีการ Upgrade MicroPython Pyb V1.1

Somsak Lima
4 min readApr 4, 2020

--

1. เช็คเวอร์ชั่นที่ติดตั้งอยู่

ก่อนอื่นให้เช็คก่อนว่า Firmware ที่ติดมากับ PyBoard นั้งเป็นเวอร์ชั่นอะไร เก่าไปหรือเปล่า และสามารถดูเบอร์ CHIP MCU ได้

ใช้โปแกรม thonny เช็คได้โดย ย้าย Cursor มาอยู่ในหน้าต่าง REPL แล้วให้กด CTRL-D ซึ่งจะทำให้ PyBoard ทำการ Soft Reboot และแสดง Welcome Screen ออกมา โดยจะมีรายละเอียดที่เราต้องการ เช่น

MPY: sync filesystems
MPY: soft reboot
MicroPython v1.12–331-ge97bb58f0 on 2020–04–04; PYBv1.1 with STM32F405RG
Type “help()” for more information.

หรืออาจใช้คำสั่ง

>>> import os; print (os.uname())
(sysname=’pyboard’, nodename=’pyboard’, release=’1.12.0', version=’v1.12–331-ge97bb58f0 on 2020–04–04', machine=’PYBv1.1 with STM32F405RG’)

จะเห็นว่าใช้ MCU STM32405RG

ก็จะแสดง System Name และอื่นออกมาให้ทราบ ดูจากเวอร์ชั่นและวันที่ หากเห็นว่าเป็น Firmware ที่เก่าไปแนะนำให้ Upgrade Firmware ใหม ่

2.ดาวน์โหลด Firmware ใหม่

โดยสามารถดาวน์โหลด Firmware ใหม่ๆ ได้จาก เวป www.micropython.org โดยดูในส่วนของ Pyboard ตามรุ่น Hardware ที่เราใช้ จากรูปตัวอย่างด้านบนจะเป็น Hardware รุ่น PYBv.1.1 ใช้ MCU STM32F405RG ซึ่งเป็น ARM®32-bit Cortex®-M4 CPU with FPU คลิกดู Spec ละเอียด

3. Jump สายให้ Boot เข้า DFU โหมด

ถ้าเป็น Board Clone ของจีน ไม่มี Pin แถวล่าง จะต้องเชื่อมขา B0 กับ 3V3 แล้วค่อยเสียบสาย USB

ถ้าเป็น Board เหมือนของแท้ ให้ เชื่อมขา DFU กับ 3.3V แล้วค่อยเสียบสาย USB

หมายเหตุ ถ้าไม่ต้องการใช้ Jumper อาจจะลองใช้คำสั่ง machine.bootloader() เพื่อ Boot เข้า Bootloader โหมด

4.โหลดโปรแกรม DfuSe

โหลดได้จาก คลิก แตกไฟล์ ติดตั้งและเรียกใช้โปรแกรม DfuSe Demo (v3.0.6) ให้เลือก Available Device ก่อน หรือโหลดจาก คลิก

ให้กด Choose เลือก ไฟล์ .dfu ที่ดาวน์โหลดมาแล้วให้คลิก Upgarde

หากโปรแกรม DfuSe Demo สามารถติดต่อกับ Pyboard ได้ก็จะเห็นข้อมูลขึ้นในช่อง Avalable DGU Device เป็น STM Device in DFU Mode

ให้คลิก Choose ด้านล่าง เพื่อเลือกไฟล์ .dfu ที่เรา Download มา

เมื่อเลือกเสร็จจะมีข้อความ File correctly loaded ให้คลิก Upgrade

ถ้าเสร็จจะขึ้นข้อความ Target 00: Updated Successful!

ให้คลิกที่ Quit เพื่อ่ออกจากโปรแกรม
ลองถอดสาย USB แล้วเสียบใหม่
เปิด Thonny แล้วเลือก Port ให้ถูกต้อง จะเห็นว่าเปลี่ยนไปเป็น version ใหม่ เช่น

MicroPython v1.17 on 2021–09–02; PYBv1.1 with STM32F405RG
Type “help()” for more information.

ลองพิมพ์ help()

>>> help()
Welcome to MicroPython!
For online help please visit http://micropython.org/help/.Quick overview of commands for the board:
pyb.info() — print some general information
pyb.delay(n) — wait for n milliseconds
pyb.millis() — get number of milliseconds since hard reset
pyb.Switch() — create a switch object
Switch methods: (), callback(f)
pyb.LED(n) — create an LED object for LED n (n=1,2,3,4)
LED methods: on(), off(), toggle(), intensity(<n>)
pyb.Pin(pin) — get a pin, eg pyb.Pin(‘X1’)
pyb.Pin(pin, m, [p]) — get a pin and configure it for IO mode m, pull mode p
Pin methods: init(..), value([v]), high(), low()
pyb.ExtInt(pin, m, p, callback) — create an external interrupt object
pyb.ADC(pin) — make an analog object from a pin
ADC methods: read(), read_timed(buf, freq)
pyb.DAC(port) — make a DAC object
DAC methods: triangle(freq), write(n), write_timed(buf, freq)
pyb.RTC() — make an RTC object; methods: datetime([val])
pyb.rng() — get a 30-bit hardware random number
pyb.Servo(n) — create Servo object for servo n (n=1,2,3,4)
Servo methods: calibration(..), angle([x, [t]]), speed([x, [t]])
pyb.Accel() — create an Accelerometer object
Accelerometer methods: x(), y(), z(), tilt(), filtered_xyz()
Pins are numbered X1-X12, X17-X22, Y1-Y12, or by their MCU name
Pin IO modes are: pyb.Pin.IN, pyb.Pin.OUT_PP, pyb.Pin.OUT_OD
Pin pull modes are: pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP, pyb.Pin.PULL_DOWN
Additional serial bus objects: pyb.I2C(n), pyb.SPI(n), pyb.UART(n)
Control commands:
CTRL-A — on a blank line, enter raw REPL mode
CTRL-B — on a blank line, enter normal REPL mode
CTRL-C — interrupt a running program
CTRL-D — on a blank line, do a soft reset of the board
CTRL-E — on a blank line, enter paste mode
For further help on a specific object, type help(obj)
For a list of available modules, type help(‘modules’)

Pyboard จะมีพื้นที่จัดเก็บโปรแกรมประมาณ 95kB

หมายเหตุ ขา I2C

  • I2C(1) is on the X position: (SCL, SDA) = (X9, X10) = (PB6, PB7)
  • I2C(2) is on the Y position: (SCL, SDA) = (Y9, Y10) = (PB10, PB11)

ปัญหาที่พบ

ในบางครั้งจะเจอว่าไม่พบ DFU Device แต่จะเห็น STM32 BOOTLOADER แทน

ให้ลองแก้ไขตามภาพ

อาจจะให้ค้นหา Driver ใน Drive C: หรือลอง Download Driver ได้จาก คลิก หรือทดลองทำตาม link ใต้บทความ

ก็จะเปลี่ยน STM32 BOOTLOADER ไปเป็น STM Device in DFU Mode โปรแกรม Dfuse ก้จะเริ่มมองเห็น Device Pyboard เพื่อลง Firmware ได้

หากไม่มี Driver อยู่ในเครื่องให้เลือกอาจลองติดตั้งโดยทำตามบทความนี้

ดูวิธี https://www.youtube.com/watch?v=gNzbA0ShaV0

หรือ https://www.youtube.com/watch?v=AeaglOYphfc

หรือ https://www.hanselman.com/blog/how-to-fix-dfuutil-stm-winusb-zadig-bootloaders-and-other-firmware-flashing-issues-on-windows

--

--

Somsak Lima
Somsak Lima

Written by Somsak Lima

สนับสนุนและส่งเสริมให้ผู้สนใจสามารถใช้งานเทคโนโลยี LoRa และ LoRaWAN ได้ โดยนำความรู้ที่ได้ไปต่อยอดเพื่อใช้งาน

No responses yet