MicroPython library to interact with Winbond W25Q Flash chips
📚 The latest documentation is available at MicroPython Winbond ReadTheDocs 📚
Python3 must be installed on your system. Check the current Python version with the following command
python --version
python3 --version
Depending on which command Python 3.x.y
(with x.y as some numbers) is
returned, use that command to proceed.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
For interaction with the filesystem of the device the Remote MicroPython shell can be used.
Test the tool by showing its man/help info description.
rshell --help
Connect the MicroPython device to a network (if possible)
import network
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect('SSID', 'PASSWORD')
station.isconnected()
Install the latest package version of this lib on the MicroPython device
import mip
mip.install("github:brainelectronics/micropython-winbond")
For MicroPython versions below 1.19.1 use the upip
package instead of mip
import upip
upip.install('micropython-winbond')
Install a specific, fixed package version of this lib on the MicroPython device
import mip
# install a verions of a specific branch
mip.install("github:brainelectronics/micropython-winbond", version="feature/add-docs-and-detailed-examples")
# install a tag version
mip.install("github:brainelectronics/micropython-winbond", version="0.4.0")
For MicroPython versions below 1.19.1 use the upip
package instead of mip
.
With upip
always the latest available version will be installed.
import upip
upip.install('micropython-winbond')
Install a specific release candidate version uploaded to Test Python Package Index on every PR on the MicroPython device. If no specific version is set, the latest stable version will be used.
import mip
mip.install("github:brainelectronics/micropython-winbond", version="0.4.0-rc2.dev4")
For MicroPython versions below 1.19.1 use the upip
package instead of mip
.
With upip
always the latest available version will be installed.
import upip
# overwrite index_urls to only take artifacts from test.pypi.org
upip.index_urls = ['https://test.pypi.org/pypi']
upip.install('micropython-winbond')
See also brainelectronics Test PyPi Server in Docker for a test PyPi server running on Docker.
Copy the module to the MicroPython board and import them as shown below using Remote MicroPython shell
Open the remote shell with the following command. Additionally use -b 115200
in case no CP210x is used but a CH34x.
rshell -p /dev/tty.SLAB_USBtoUART --editor nano
Perform the following command inside the rshell
to copy all files and
folders to the device
mkdir /pyboard/lib
mkdir /pyboard/lib/winbond
cp winbond/* /pyboard/lib/winbond
cp main.py /pyboard/lib/winbond
cp boot.py /pyboard/lib/winbond
from machine import SPI, Pin
import os
from winbond import W25QFlash
# the used SPI and CS pin is setup specific, change accordingly
# check the boot.py file of this repo for further boards
flash = W25QFlash(spi=SPI(2), cs=Pin(5), baud=2000000, software_reset=True)
flash_mount_point = '/external'
try:
os.mount(flash, flash_mount_point)
except Exception as e:
if e.errno == 19:
# [Errno 19] ENODEV aka "No such device"
# create the filesystem, this takes some seconds (approx. 10 sec)
print('Creating filesystem for external flash ...')
print('This might take up to 10 seconds')
os.VfsFat.mkfs(flash)
else:
# takes some seconds/minutes (approx. 40 sec for 128MBit/16MB)
print('Formatting external flash ...')
print('This might take up to 60 seconds')
# !!! only required on the very first start (will remove everything)
flash.format()
# create the filesystem, this takes some seconds (approx. 10 sec)
print('Creating filesystem for external flash ...')
print('This might take up to 10 seconds')
# !!! only required on first setup and after formatting
os.VfsFat.mkfs(flash)
print('Filesystem for external flash created')
# finally mount the external flash
os.mount(flash, flash_mount_point)
Kudos and big thank you to crizeo of the MicroPython Forum and his post to use Winbond flash chips