H8/3069F-USBホストボードを実用したい
10種類ほどの読み込み可能実績をへて最近、SonyのUSBメモリが読めないことが判明した
USBバスリセットの後、GetDiscriptorでエラーになり、リトライも失敗
試行錯誤の結果、USBバスリセットがうまくいっていない様子だった
<フロー>
① USBメモリの読み取りの冒頭でSL811HSTの各レジスタをゼロクリア(CTRL2:0Fhは80h)し、バスリセット
② レジスタ設定。
③ エニュメレーション中にエラー(NAK)だったら
④ USBバスリセット
⑤ レジスタ設定。
⑥ ③からやり直し。
といった処理だが、④のUSBバスリセットは、各レジスタをゼロクリアせずにCTRL1:05hの[BIT4を0],[BIT3を1],[BIT0を0]を書き込むところから行う処理
これがNGらしい
SL811HSTの説明書を見るが、各設定フラグの優先順位とか条件のマトリックスが解読できない
CTRL1レジスタの説明によるとUSB Engine Resetといった記述がある。
これは、チップ内部の状態にも影響があることを意味するのか?
それとも、別のレジスタのフラグ設定(チップの状態)が優先し、逆に影響していないのか?
これまで実績があるだけに、後者なのかもしれない
結局、USBバスリセットは、冒頭のリセット処理を行うとすんなり読めた
① SL811HSTの各レジスタをゼロクリア(CTRL2:0Fhは80h)し、バスリセット
② レジスタ設定。
③ エニュメレーション中にエラー(NAK)だったら
④ ①からやり直し。
結果オーライ