@@ -80,8 +80,8 @@ bool write_command(uint8_t cmd, uint8_t *dataout, uint8_t len, uint8_t crc_xor =
8080
8181bool read_status (uint8_t *status, uint8_t *datain, uint8_t okLen, uint8_t failLen, bool skip_start = false ) {
8282 auto on_failure = []() { return false ; };
83- assertLessOrEqual (okLen + 2 , MAX_MSG_LEN);
84- assertLessOrEqual (failLen + 2 , MAX_MSG_LEN);
83+ assertLessOrEqual (okLen + 3 , MAX_MSG_LEN);
84+ assertLessOrEqual (failLen + 3 , MAX_MSG_LEN);
8585 if (!skip_start) {
8686 assertAck (bus.startRead (cfg.curAddr ));
8787 }
@@ -96,6 +96,10 @@ bool read_status(uint8_t *status, uint8_t *datain, uint8_t okLen, uint8_t failLe
9696 else // All other errors have no data
9797 expectedLen = 0 ;
9898
99+ uint8_t len;
100+ assertAck (bus.readThenAck (len));
101+ assertEqual (len, expectedLen);
102+
99103 for (uint8_t i = 0 ; i < expectedLen; ++i)
100104 assertAck (bus.readThenAck (datain[i]));
101105
@@ -105,7 +109,7 @@ bool read_status(uint8_t *status, uint8_t *datain, uint8_t okLen, uint8_t failLe
105109 else
106110 assertAck (bus.readThenNack (crc));
107111
108- uint8_t expectedCrc = Crc ().update (*status).update (datain, expectedLen).get ();
112+ uint8_t expectedCrc = Crc ().update (*status).update (len). update ( datain, expectedLen).get ();
109113 assertEqual (crc, expectedCrc);
110114 if (!cfg.repStartAfterRead )
111115 bus.stop ();
0 commit comments