STM32H743 にて USB AUDIO 2.0 の実装を行っているが, そこで使用する Clock 周波数の feedback 用に SOF timing 信号を TIMx の Input Caputre 入力に入れ, 信号の立ち上がり事にAudio clock の count 値を latch し前回からの差分で kHz 単位の周波数を計算しようとしている.
現在は TIM5 経由で SOF timing を取り出しているが, 他の用途で32bit counter が必要となった. 32bit counter は TIM2, 5 の 2つ ***だけ*** で, TIM2 はすでに Audio clock 周波数の計測用に使用済で, TIM5 しか空いていない. TIM5 経由でなく, やはり SOF 端子そのものから SOF timing 信号を取りだしたい.
しかし, chip から出力される SOF timing 信号が SOF 毎に 2本立っており使えない状態にあった. その原因を調べ対策を行なった.
問題点: SOF 信号 USB 上の SOF packet 毎に 2 本 pulse が出力
上が USB 信号, 下が SOF 出力端子の信号
前側が偽信号, 後ろ側が本来の信号
環境:
Ubuntu 17.10
NUCLEO-H743ZI
とある target board (NUCLEO-H743ZI を daughter board として使用)
arm-none-eabi-gcc 5.4.1 20160919
CubeMX 4.25.0
CubeMX 4.25.0 で吐かれる HAL + 独自 driver
期待値: SOF packet 毎に 1 回 pulse を出力
行った事:
とりあえず, ずーっとそういう bug と思っていたが, 念の為 CubeMX で USB と SOF timing 信号出力だけの source を作成し, USB33DEN 対策を入れたものを NUCLEO に焼いた. なんと問題く 1 本しかない!!!
もしやと思い CRS の実装を行ない target に焼いた所問題なく 1 本なった.
結論:
とりあえず USB としてだけ使うのであれば, 実力で通信ができるが, SOF 信号の取り出しなど細かい事をすると, CRS を使用しないと問題が発生してしまう. CubeMX の code そのままであれば問題はなかったが, あまり使用しないとする方針としているので, 大切な一歩となった
余談 (ぐち):
TIMx はなんであんなに細か仕様なのか, すべて TIM2 の様に 32bit の仕様にできないのか.
0 件のコメント:
コメントを投稿