In the Flash info structure, the field containing the end address of
the Flash storage is documented to be non-inclusive.
However, when this field is compared to the end address of a read or
write, which is also non-inclusive, it is considered an error that
these two values match, which is incorrect, as this would error out
on an attempt to fully read/write the last page.
Fix this by simply changing the >= comparison into a > one.
There were a few things wrong with the SD card write implementation:
1. The protocol change regarding the interpretation of offsets
introduced with SDHC cards was not taken into account in the write
path, unlike in the read path.
2. All SPI writes involved in the process were actually issued as reads
due to the use of the SPI_RW() function, the implementation of which
seems to have gone through some churn. Likely just an instance of
bit-rot.