2018年12月30日日曜日

KICAD の short cut 専用 keyboardの作成 (win7対策)

KICAD short cut keyboard が Windows 7 で正しく認識しない問題を知らべている.

とりあえず波形調べてみた.



電圧が高い方が host の出力, 低い方が STM32L072 である. 今回 3.3V LDO がなかったので, 3.0V にた為, 電圧が低い. datasheet 上 margin 0 で範囲に入っている (通常 ng ですが...) これはおかしと思い, それでは mask rom の bootloader での USB DFU ではどうかと確認してみると, ほぼ同じ感じであきらかな違いはない.  どう考えても drive strength が低い様な気がする. しかし, mask rom の bootloader は正しく認識する (ある意味こんな波形で通信できるのかと感心した). 良く考えると, DM,DPは差動信号なので, cross した以降は特にらだらだ上っても問題ない. やはり, 信号波形とは関係なさそうだ.


当初から usb bus analyzer を使用しているが, どうも L072 が PC からの packet 正しく取れていないく, 当然 data も返す事もできていない様に感じる. ただし, ACK が返っているので, ちょっと謎である.

次に USB 用の内部 clock である HSI48 関連を見た. SYSCFG, CRS など関連 module の範囲が広いので enable の順番などを確認した. その中で, 時々正しく device descriptor の要求に対し, 返事を返している事があった. おおよそ 20 回に 1回程度であろうか. やはり USB clock がおかしいのであろうか... HSI48 の 48MHz の clock 出力周波数をみてみると, 結構 jitter が乗っている. また, オシロのなんちゃって周波数カウンタ的にも 100ppm 以上の変化がある. Ubuntu と Windows でのそれほどの違いはなさそうである. 唯一違うのが get device descriptor の setup を発行するまでに SOF が 36 個程度か 20 個程度かというものであるが, mask rom の bootloader の DFU では問題なく認識しているので, この SOF に起因するとは思えない.


HSI48をさんざん調べ一点直したところがあったが, 特に改善はみられない. setup 自体は問題なく受けていて処理ができていないのではなかと考え, 該当 code に printf を入れまくると, なぜか, setup を受けているはずなのに setup 処理 routine に飛んで行っていない. setup 割り込みが発生してから, 割り込み要因が途中で変化している事があった. その時には, Win7 が usb を reset していた. 今回割り込み要因を調べるのに, 毎回 EPnR register から読んでいた. もしやと思い EPnR を一度 locad buffer に入れてからそれを参照する様にした所, 全く問題なくなった.
毎回 EPnR を読むと割り込み要因が消す, もしくは次の packet を受信してその要因をみていたようだ. ふだん module の 割り込み register を一度 loal buffer にいれているのだが, register 名が割り込み感がなかったので毎回読んでいたのではないかと思う. STM32L4x でなにもなかったが STM32L0x は core clock の上限が 32MHz なので処理が比較的ゆっくりとなり, 問題が出てきたのではなかと思われる.




0 件のコメント:

コメントを投稿