H8/3069F-USBホストボードを実用したい

10種類ほどの読み込み可能実績をへて最近、SonyUSBメモリが読めないことが判明した

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)だったら

④ ①からやり直し。

 

結果オーライ