aboutsummaryrefslogtreecommitdiff
path: root/test_fw/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'test_fw/README.md')
-rw-r--r--test_fw/README.md29
1 files changed, 29 insertions, 0 deletions
diff --git a/test_fw/README.md b/test_fw/README.md
new file mode 100644
index 0000000..4ad7d16
--- /dev/null
+++ b/test_fw/README.md
@@ -0,0 +1,29 @@
+# ocularium test firmware
+
+This is Arduino-based test firmware written to derisk systems quickly before moving to a Rust
+implementation.
+
+## SD bug (?)
+
+This firmware _doesn't_ work with the stock `SD.h` that ships with the RP2040 Arduino core. It needs
+the following change at the end of `Sd2Card.cpp:cardCommand`:
+
+```c++
+ // XXX: Assume CMD0 succeeds.
+ if (cmd == CMD0)
+ {
+ spiRec();
+ status_ = 0x1;
+ }
+```
+
+With this, it works perfectly, but without, it gets stuck unable to ever initialize the card.
+
+Logic analyzer says the card (I've tried multiple brands) sends an `0x7f` (general error) in the
+byte after the CMD0 sequence completes, and _then_ sends the expected `0x01` R1 in the following
+byte. The SD library is looking for any byte starting with a 0 bit (indicating message presence), so
+treats this as a genuine error and always fails. If we change the implementation to ignore this
+byte, the rest of the initialization succeeds without error.
+
+Currently, I'm just applying a transient patch to my local PlatformIO download of the RP2040 core to
+resolve this temporarily.