Armadilloフォーラム

起動後にUSB_PWRSEL_ENのPinStateが二度Lowになります

l01c0de

2021年5月31日 11時31分

基板の起動後、ピン番号8番 「USB_PWRSEL_EN」のPinStateが二度Lowになります。
Lowになっている時間は250msほどです。
Armadillo-410のハードウェアマニュアルを確認した所、該当ピンのリセット解除後の信号状態はHighとなっておりました。
上記の挙動を解消し、リセット後は常にHighになるよう修正したく思います。
解決方法をご教示頂ければ幸いです。
該当基板のシリアル番号は「018261」となります。

コメント

at_ohsawa

2021年5月31日 11時53分

> 基板の起動後、ピン番号8番 「USB_PWRSEL_EN」のPinStateが二度Lowになります。
> Lowになっている時間は250msほどです。

HWの仕様上変更することはできません。ただ、この仕様で一部のデバイスが
enumerationに失敗するという報告があったので(本件もそういう事だと思います)
逆に、一旦確実にdisconnectしてconnectするためLinuxの起動シーケンス中で
VBUSを1秒間停止するパッチを書いたことがあるので添付します。

ファイル ファイルの説明
a400_vbus_1sec_off.patch

l01c0de

2021年5月31日 17時27分

迅速な返答を下さり、ありがとうございます。

> HWの仕様上変更することはできません。ただ、この仕様で一部のデバイスが
> enumerationに失敗するという報告があったので(本件もそういう事だと思います)
HWの仕様による現象との事、承知致しました。

> 逆に、一旦確実にdisconnectしてconnectするためLinuxの起動シーケンス中で
> VBUSを1秒間停止するパッチを書いたことがあるので添付します。
パッチを添付して下さり、ありがとうございます。
当方の問題が解決できそうか、検証に使わせて頂きます。

l01c0de

2021年6月1日 10時58分

当障害への対策について、続けて質問がございます。
今回の障害ですが、基板起動タイミングで何度もHigh→Lowを繰り返すため、起動時に接続されているUSBデバイスを正常に認識できないという問題が発生しております。

上記問題の解決のため、「USB_PWRSEL_EN」の信号をブートローダ読込タイミングでLowに落としたまま固定し、カーネル読込タイミングでHighにするという修正を行っております。
修正に伴い、二度High→Lowが発生する現象は起こらず、起動後はLow→Highのみとなる事を確認しています。

上記修正方法に何らかの問題はありますでしょうか?
基板の仕様により二度のHigh→Lowが発生しているのであれば、無理にその動作を変えない方が宜しいのでしょうか?

ご助言頂きたく思います。

at_ohsawa

2021年6月1日 11時08分

> 上記修正方法に何らかの問題はありますでしょうか?
> 基板の仕様により二度のHigh→Lowが発生しているのであれば、無理にその動作を変えない方が宜しいのでしょうか?

たしかにArmadillo-410の場合は問題ないですね…
失礼致しました。先に言及している基板仕様の話はArmadillo-420/440
での仕様で、メンテナンス都合Armadillo-410のソフトウェアを共通実装に
していたのですが、今回のようにA410単独で使う分には問題ありません。

l01c0de

2021年6月1日 11時58分

> > たしかにArmadillo-410の場合は問題ないですね…
修正に問題ないとの事、承知致しました。

続けて確認したい事があります。
先に正確な情報を出せず申し訳ないのですが、今回の修正によりブートローダ読込時に一瞬(数msほど)Highになり、その後にLowになり、カーネル読込時にHighになった後は維持されているという状態になります。
上記のような状態でも問題はないでしょうか?
何度も申し訳ございませんが、ご助言頂きたく思います。

> > 先に言及している基板仕様の話はArmadillo-420/440での仕様
ということは今回のArmadillo-410基板では、なぜ二度のLow降下が発生するかは分からないという事ですね。承知致しました。

いつも色々とご返信下さり、ありがとうございます。

l01c0de

2021年6月1日 19時06分

すいません、勘違いをしておりました。
> メンテナンス都合Armadillo-410のソフトウェアを共通実装に
上記より、Armadillo-410基板でも二度のLow降下が発生するのは仕様という事ですね。
理解致しました。
お騒がせしてしまい申し訳ありませんでした。

> 先に正確な情報を出せず申し訳ないのですが、今回の修正によりブートローダ読込時に一瞬(数msほど)Highになり、その後にLowになり、カーネル読込時にHighになった後は維持されているという状態になります。
> 上記のような状態でも問題はないでしょうか?
こちらにもご返答頂けると幸いでございます。

at_ohsawa

2021年6月4日 17時06分

> その後にLowになり、カーネル読込時にHighになった後は維持されているという状態になります。

この信号によってLowによってVBUSが0Vに落ちている期間が少なくともUSB規格上は2.5usあれば、
確実に一旦disconnectするので、その後Highで正しく動作すると思います。

短期間でHigh->Low->Highを経過するとUSBデバイス側の状態が正しく初期化されない等の
懸念があるので確実にLowを保持してから最後のHighに入るのが望ましいです。

実際はVBUSには接続時の突入電流と負荷の変動に耐えるため普通大きめのコンデンサを
付けて有ると思うので(どのような拡張基板にしているのか分かりかねるので想像です)、
この信号でVBUSを制御していると、実際にコンデンサが放電してLowになるのは数ms
から数秒になると思います、条件に合わせて実測して余裕を持った方がいいと思います。
(先のパッチでは、かなり余裕を付けて1秒にしていました)