Inhaltsverzeichnis

MicroPython

Ich möchte mich mal kurz mit MicroPython beschäftigen. Deshalb habe ich mir vom Chinesen das unten aufgeführte PBYv1.1 Board welches einen STM32F405 beherbergt gekauft.

Funktionstest

Nach dem Anstecken an den Mikro-USB meldet sich die Platine als USB-Laufwerk an. Damit man die virtuelle serielle Schnittstellen nutzen kann, muss man im Gerätemanager den Treiber aktualisieren mit der auf dem USB-Laufwerk bereitgestellte Datei: pybcdc.inf

Der migelieferte Treiber verursacht unter folgenden Fehler:
Die INF-Datei … enthält keine Digitalsignaturinformationnen

Da ab Windows 8 normalerweise nur Treiber mit einer digitalen Signatur installierte werden können. Abhilfe siehe folgendes Dokument:
Micro-Python-Windows-Setup.pdf

Nach der Installation des Treibers (mit gedrückter Shift-Taste Neustart auswählen , und dann bei Adavanced mit F7 nach dem Neustart..) meldet sich das Board im Terminal (aber erst einem Board reset):

MicroPython v1.9.4-85-gdf9b7e8f on 2018-05-24; PYBv1.1 with STM32F405RG

Type "help()" for more information.

>>> 

Soweit so gut, allerdings konnte ich mit meinem übliche Terminal Programm keine Befehl senden, bzw. ich bekam keine Antworten zurück. (Handshaking RTS/CTS aktivieren dann gehts auch mit Terminal)

Erst nachdem ich PuTTY ( 115200 8N1 ) verwendet hatte, konnte ich mit dem Board interagieren.

Und hier noch ein kurzes Demo des Beschleunigungssensors:

import pyb
accel = pyb.Accel()

while True:
    print(accel.filtered_xyz())
    pyb.delay(250)

Firmware Update

Brücke zwischen +3V3 und DFU-Pin (boot0) setzen und dann mit USB verbinden. Wenn der Bootloader aktiviert ist leuchten die rote, gelb und blaue LED dunkel.

Als erstes mal eine Sicherung durchführen (512kByte sollten reichen):

Sicherung erstellen mit (Upload):

dfu-util.exe -a 0 -s 0x08000000:524288 -U test_orig_512k.bin

dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
Upload  [=========================] 100%       524288 bytes
Upload done.

und jetzt die aktuellste Firmware (Stand 02.01.2018) auf spielen:

dfu-util.exe -a 0 -D pybv11-20190102-v1.9.4-771-gb33f108cd.dfu

dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

Match vendor ID from file: 0483
Match product ID from file: df11
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
file contains 1 DFU images
parsing DFU image 1
image for alternate setting 0, (2 elements, total size = 331280)
parsing element 1, address = 0x08000000, size = 14720
Download        [=========================] 100%        14720 bytes
Download done.
parsing element 2, address = 0x08020000, size = 316544
Download        [=========================] 100%       316544 bytes
Download done.
done parsing DfuSe file

Das Modul meldet sich dann mit:

MicroPython v1.9.4-771-gb33f108cd on 2019-01-02; PYBv1.1 with STM32F405RG
Type "help()" for more information.
>>>

Hmm meine modifizierte main.py blieb erhalten und wurde nicht zurückgesetzt.

Achtung: Jetzt funktioniert auch mein standard Terminal wieder, ohne das das Handshaking aktiviert ist. (muss nun wieder entfernt werden).

SD-Karte

Kurzes Beispiel, wie man sich den Inhalt der SD-Karte anschauen kann (root Verzeichnis)

import os

sd = pyb.SD

#sd = pyb.SDCard()

os.mount(sd, '/sd')
os.listdir('/sd')

os.umount('/sd')

Tipps