在 MaixPy 上莫名其妙的讀取不到 SD 卡文件的原因是因為 SPI1 被修改定義了。


2020年10月1日 目前通過接入軟 SPI 模塊解決問題。

所以在未來會使用傳遞 結構體 的方式作為抽象層恢復多端使用的 SPI 資源,或者引入 軟 SPI 接口解決部分問題。

monkey patch 如下:


from machine import SPI
import utime
from Maix import GPIO
from fpioa_manager import fm

# MaixBit       W25QXX
# CS  (25)      CS
# MOSI(22)      D0 DI(MOSI)
# MISO(24)      D1 DO(MISO)
# SCK (23)      SCK

''' CUBE
07 |  V
15 | 21
20 | 08
 G | 06
'''

''' AMIGO
24 |  V
06 | 11
12 | 10
 G | 27
'''

print("Welcome to MicroPython!")
fm.register(20, fm.fpioa.GPIO5, force=True)
cs = GPIO(GPIO.GPIO5, GPIO.OUT)
#cs.value(0)
#utime.sleep_ms(2000)

print(os.listdir())
spi = SPI(SPI.SPI1, mode=SPI.MODE_MASTER, baudrate=400*1000, polarity=0, phase=0, bits=8, firstbit=SPI.MSB,
    sck=21, mosi=8, miso=15)#使用程序配置了 cs0 則無法讀取 W25QXX
print(os.listdir())
print(spi)

while True:
    fm.register(21, fm.fpioa.SPI1_SCLK, force=True)
    fm.register(8, fm.fpioa.SPI1_D0, force=True)
    fm.register(15, fm.fpioa.SPI1_D1, force=True)
    cs.value(0)
    write_data = bytearray([0x90, 0x00, 0x00, 0x00])
    spi.write(write_data)
    id_buf = bytearray(2)
    spi.readinto(id_buf, write=0xff)
    print(id_buf)
    print(time.ticks_ms())
    cs.value(1)
    #cs.value(0)
    utime.sleep_ms(200)
    #utime.sleep_ms(2200)
    fm.register(27, fm.fpioa.SPI1_SCLK, force=True)
    fm.register(28, fm.fpioa.SPI1_D0, force=True)
    fm.register(26, fm.fpioa.SPI1_D1, force=True)
    print(os.listdir())

spi.deinit()

這個問題實際上並沒有什么好的解決方法,最好是統一到同一套 IO 接口,然后多個 SS (GPIO)片選完成多從機的通信,從而忽略這個重映射的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM