Ich versuche aus einem CH376 die aktuelle Größe eines USB-Sticks (und
die freie Kapazität) zu ermitteln.
Zum Testen hängt das CH376-Modul an einem USB-seriell-Wandler, ich nutze
die UART-Schnittstelle (der CH376 kann auch noch SPI und parallel).
fdisk sagt folgendes zum Stick:
1 | Festplatte /dev/sdb: 3,75 GiB, 4023386112 Bytes, 7858176 Sektoren
|
2 | Festplattenmodell: USB Flash Disk
|
3 | Einheiten: Sektoren von 1 * 512 = 512 Bytes
|
4 | Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes
|
5 | E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes
|
6 | Festplattenbezeichnungstyp: dos
|
7 | Festplattenbezeichner: 0x6fdd569a
|
8 |
|
9 | Gerät Boot Anfang Ende Sektoren Größe Kn Typ
|
10 | /dev/sdb1 * 128 7858175 7858048 3,7G b W95 FAT32
|
Daraus entnehme ich die folgenden Werte:
1 | Gesamtsektoren : 7858176 => 00 77 E8 00
|
2 | Sekt. für Partition: 7858048 => 00 77 E7 80
|
In meinem Testprogramm nutze ich die Funktion CMD_DISK_QUERY (0x3F). Die
soll lt. Datenblatt [1] 4 Bytes für die Gesamtsektoren, 4 Bytes für die
freien Sektoren und ein Byte für den Dateisystemtyp liefen.
Ich bekomme folgende Ausgabe:
1 | disk_query
|
2 | Query OK
|
3 |
|
4 | total sectors
|
5 | byte: 0x09
|
6 | byte: 0x70
|
7 | byte: 0xAB
|
8 | byte: 0x77
|
9 |
|
10 | free sectors
|
11 | byte: 0x00
|
12 | byte: 0x40
|
13 | byte: 0x11
|
14 | byte: 0x77
|
15 |
|
16 | Partition type: 0x00
|
Mir scheint, mein Ergebnis ist um ein Byte verschoben.
Die Qualität der chinesischen Doku kann ich nicht einschätzen, aber das
was in Englisch verfügbar ist, ist recht bescheiden.
Hat jemand mit dem Teil schon erfolgreich gearbeitet?
Kennt jemand eine brauchbare Dokumentation zum CH376?
Bisher versuche ich, das Codeschnipsel aus [2] zum Spielen zu
bekommen...
[1] https://www.mpja.com/download/ch376ds1.pdf
[2]
https://gist.githubusercontent.com/K-ways/52f3e212883f1f5a8076d1efe13a18c4/raw/357fa44b0e90b6ba49db50512e8c1e6a3d6969ef/CH376S_UART_One.ino