FemtoRVのSDカードファームウェアに低速SDカード用のパッチをあてた
追記
ULX3S上でFemtoRV(RISC-V)のサンプルプログラム tinyraytracer を動かそうとしたところ以下のようなエラーががが
sd_readsector: Timeout
なんだろなあと調べまわっていたところ、FemtoRVの開発に使っているSDカードはSanDiskのA1対応(なんか知らんが早いらしい)してるSDカードで、自分が使っているのは非A1のSDカードなことが判明。SDカードの読み込みが遅いせいでタイムアウトが発生しているのかもしれない。
(高速でいらっしゃるA1対応 SanDisk 様)
https://gyazo.com/49d170adcb08f1a46929bd9b2878e180
自分のSDカードが遅くてタイムアウトしてるなら待ち時間を増やせばいいんじゃね?ということで sd_readsector のリトライ回数を以下のように増やしたところ、無事に tinyraytracer が動くようになった!やったね!!
code:diff
diff --git a/FemtoRV/FIRMWARE/LIBFEMTORV32/spi_sd.c b/FemtoRV/FIRMWARE/LIBFEMTORV32/spi_sd.c
index 14d61f7..4498378 100644
--- a/FemtoRV/FIRMWARE/LIBFEMTORV32/spi_sd.c
+++ b/FemtoRV/FIRMWARE/LIBFEMTORV32/spi_sd.c
@@ -316,7 +316,8 @@ int sd_readsector(uint32_t start_block, uint8_t *buffer, uint32_t sector_count)
// Wait for start of block indicator
while(spi_receive() != CMD_START_OF_BLOCK) {
// Timeout
- if(retries > 5000) {
+ if(retries > 50000) {
printf("sd_readsector: Timeout\n");
return 0;
}
(tinyraytracer 様の勇姿)
https://gyazo.com/5fdb6cf31cfd09d06ddbfa1594ab2fac