Page 1 of 1

Please could some Pyboard 1.x users try this

Posted: Thu Apr 22, 2021 5:17 pm
by pythoncoder
This is in support of PR6007. I experienced problems with Kingston SD cards where the SPI bus is shared with other peripherals. The fault is fixed by a simple change to sdcard.py. The question is whether I have some specially dodgy SD cards or whether others are affected. In my testing Sandisk cards work fine but both my Kingston cards fail. I'm particularly interested in results from Kingston cards - have I been sold clones?

The test requires sdcard.py from official source and an SD card in the Pyboard slot. It is non-destructive, only performing reads. Cut and paste - it should print 100 lines. Failure is an OSError.

Code: Select all

import os
from machine import Pin, SoftSPI
from sdcard import SDCard

spi = SoftSPI(sck=Pin('SD_CK'), mosi=Pin('SD_CMD'), miso=Pin('SD_D0'))
cs = Pin('SD_D3')
sd = SDCard(spi, cs)

for _ in range(100):
    buf = bytearray(512)
    spi.write(os.urandom(4))
    sd.readblocks(0, buf)
    print(buf)

Re: Please could some Pyboard 1.x users try this

Posted: Thu Apr 22, 2021 8:26 pm
by dhylands
I managed to dig up 2 Kingston cards. The first was a 16 Gb card formatted for use on a Raspberry Pi (so multiple partitions).

Code: Select all

>>> import test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/flash/test.py", line 7, in <module>
  File "/flash/sdcard.py", line 54, in __init__
  File "/flash/sdcard.py", line 87, in init_card
  File "/flash/sdcard.py", line 135, in init_card_v2
OSError: timeout waiting for v2 card
I tried formatting it as a single smaller partition and tried formatting the entire card with no partitions, and all of them failed like the above, although in all of the cases the card worked fine from the linux box.

The second was an 8 Gb - brand new still in the packaging. It printed lots of duplicate lines:

Code: Select all

>>> import test
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x03\x00\x0b\xdc\xd4\xc8\x00 \x00\x00\x00`\xed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\xaa')

Re: Please could some Pyboard 1.x users try this

Posted: Fri Apr 23, 2021 5:47 am
by pythoncoder
Thank you, Dave, that confirms my observations (my cards are at least a year old). Given that your new card works, maybe Kingston have fixed a problem.

Re: Please could some Pyboard 1.x users try this

Posted: Fri Apr 23, 2021 5:26 pm
by dhylands
My "new" card is also probably a year or two old, I just hadn't removed it from the packaging yet. I was mostly thinking "new" as in hadn't ever been used before.

A word of warning

Posted: Sat Apr 24, 2021 6:21 am
by pythoncoder
One thing to note is that my two Kingston cards both had corrupted filesystems (despite apparently working fine). The test still failed even after deleting the partition and re-formatting. But it does suggest a problem with Kingston cards - my Sandisk ones don't exhibit this.