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 なので処理が比較的ゆっくりとなり, 問題が出てきたのではなかと思われる.
2018年12月30日日曜日
2018年12月28日金曜日
マイナンバーの署名用電子証明書 (長い方) のパスワードは英字はすべて大文字です
年末になり来年早々恒例の確定申告の作成をしなければならない. いままで郵送で送り付けしかも, 受取証の返信封筒なしのチャレンジャブルな方法で行なっていた. 今年始めに通知カードをマイナンバーカードに切り換えた. また, カードリーダも用意してずっと放置していたので, そろそろ設定などをしなければと重い腰を上げた.
以下の処理を行なった
1. JPKIの download と install
2. 国税庁 site の root 証明 / 中間証明設定
信頼済み site 登録
3. 開始届出の新規設定
この 1 の所で, マイナンバーカードを認識させて, 証明書の表示ができるのでパスワードを打ってみた. これだと思うパスワードを打ってみたが通らない. 違うのかと思い別のパスワードを入れてみてなんやかんやで 5回を越えパスワードロックした.
ググってみると英字は 大文字 だと言う事だ.
通常大文字小文字混在やろうと思うのだが, 大文字だけであった. パスワードのアンロックは区役所の端末でしかできない. たぶん小文字で打ってしまっていたのを大文字にすれば良いはずだが, ロック解除だけでやっぱり違うパスワードだったとなったら二度手間なので, 今回は再設定をした. 大文字だけってなんかだなぁと, 思い区役所に行った. 手続きは,
1. 申請書 (名前, 住所, etc, ロック解除か再設定か, 印鑑いらなかった)
2. 端末で再設定 (4文字パスワードで入れて確認される)
役所に行かなければならないが, 内容はそれほど繁雑でなかった. 大文字だと再認識しながら, 多分同じであろうパスワードを打った. それほど混んでいなかったので役所に着いてから 20 分もかからず完了した.
家に帰り JPKI で確認すると問題なく証明書の確認ができた. ただ eTAX の送信時にまたなんらかのトラブルがあるはずだ. なかなか楽しませてもらえそうだ...
署名用電子証明書 (長い方) のパスワードは英字はすべて 大文字 です
以下の処理を行なった
1. JPKIの download と install
2. 国税庁 site の root 証明 / 中間証明設定
信頼済み site 登録
3. 開始届出の新規設定
この 1 の所で, マイナンバーカードを認識させて, 証明書の表示ができるのでパスワードを打ってみた. これだと思うパスワードを打ってみたが通らない. 違うのかと思い別のパスワードを入れてみてなんやかんやで 5回を越えパスワードロックした.
ググってみると英字は 大文字 だと言う事だ.
通常大文字小文字混在やろうと思うのだが, 大文字だけであった. パスワードのアンロックは区役所の端末でしかできない. たぶん小文字で打ってしまっていたのを大文字にすれば良いはずだが, ロック解除だけでやっぱり違うパスワードだったとなったら二度手間なので, 今回は再設定をした. 大文字だけってなんかだなぁと, 思い区役所に行った. 手続きは,
1. 申請書 (名前, 住所, etc, ロック解除か再設定か, 印鑑いらなかった)
2. 端末で再設定 (4文字パスワードで入れて確認される)
役所に行かなければならないが, 内容はそれほど繁雑でなかった. 大文字だと再認識しながら, 多分同じであろうパスワードを打った. それほど混んでいなかったので役所に着いてから 20 分もかからず完了した.
家に帰り JPKI で確認すると問題なく証明書の確認ができた. ただ eTAX の送信時にまたなんらかのトラブルがあるはずだ. なかなか楽しませてもらえそうだ...
署名用電子証明書 (長い方) のパスワードは英字はすべて 大文字 です
2018年12月22日土曜日
KICAD の short cut 専用 keyboardの作成 (基本機能完成)
先に REF-STM32L4-01 基板を作成した基板に STM32L072 を実装した. L072 の RCC や SYSCFG などの software の実装が必要なので実装し, 安定して動作する様にした. 単一の code でなく, bootloader と本来の機能の firmware の 2 種あるので倍と言う訳ではないが, 1.5 倍くらいの時間が掛っている. また, USB 関連の自作 middleware で HID は実装していなかったのでこの code も実装した. USB の class は面倒な感じであるが, HID に関しては, Report descriptor が面倒なだけであって, 転送する data は 8 byte を送るだけである. また, Report descriptor も面倒と言っても keyboard (boot i/f) であれば, USB HID の document に書いている通りでそれほど苦労する事はない. とは言え実際はちょっと変えているが...
まずは, ROTTAY 22key に接続せず, 基板のみでこの基板上のスイッチでなんらかの Report (key code) を送信する事にし, とりあえず "a" を送る code を書いた. これは単に 0x00, 0x00, 0x04, 0x00, ... の 8 bytes を送るだけで, 難無く送れた. 0x04 部分が USB HID の key code で "a" に相当するものである. しかし, USB を PC に挿して送信できるまでに USB を認識するところで reset 出まくりっぽい挙動をしており, その調整が必要である. また, Windows 7 では全く認識しない. これは要調査である. まさか IAD descript を使っているからか?
USB HID で report を受信できたので, 次は実際に 22key に接続し, key を scan し, それら key に対応した report を送信でき様にする. これにより
matrix key の読み込み
押された key から対応する key code を認識
key code の送信
の実装が必要になる.
key scan とくに問題ないが, key code を認識する所が面倒になる. と言うのも, どの key に key code を対応させるかを考える事になり, それはつまりその key にどの機能を割当るかと同等である. 今回 22key は左手で操作する事を検討しているが, home position や親指に近い方に重要な, もしくは良く操作する機能を assign するべきである. また 22 個の key しかないので, 拡張する為に "SHIFT" key も導入を検討した. 例えば grid 選択の順送りに対して逆は SHIFT を押すなどが可能である. とりあえずの assign はしているが, 頭で考えているだけではあまり意味がないので, 実際に回路を書いて, board data も書いて操作性を確認しようと考えている. 丁度この制御基板を書き key の assign の最適化をするのが良いのではないかと思っている (現状は reference board を使っている).
今は,
"5" に Auto zoom
"123" に部品関連
"789" に配線系
"+-=BS" に layer, grid
"ENTER" に SHIFT
を assign した. とりあえず pcbnew の assign をしたが, eeschema はまた違った assign が必要である. それもあり, 電卓 mark を押す事により, key code を eeschema 用, pcbnew 用の変更をできる様にもした. この 22key はすべての key top が青く光る仕様となっている為, どちらの key code になっているか分る様に pcbnew の key code が選らばれている場合には, 青く光らせている.
左側が eeschema 時, 右側が pcbnew 時
まだまだスカスカでもっと assign できるのだが必要であれば, どんどん assign していけば良いだろう. とにかく assign にはよく使う単品 command にするべきで
- 配線, 部品配置と良く使うものを assign (あたりまえだけだが)
- mouse の wheel でできる事は assign しない
- text の編集など通常の keyboard の操作が必要なものは assign しない
- 22key の組み合せ 2, 3 個で解決できるものは assign しない
(layer の内層切り替えは Cu.Top + NEXTにするとか)
ちなみに, key code の assign は人によって変更が必要になると思われるので, USB CDC の 簡易 shell にて, assign の変更ができる様にしておき, MCU 内部 EEPROM に記憶しおけば, 変更する毎に compile の必要はなくなるだろう. それもあって config descriptor は IAD descriptor を用いて CDC と HID の composite device としている.
そう言えば, 当初 22key の匡体が開けられないので, 横を切断した裏蓋を接着剤で止めたのが下の写真, 横から見ると不細工だが, 通常 key top しか見ないので問題ないだろう. とりあえずもう 1 台は必要なので, その時は最初から key top 部分のネジを外して裏蓋を開けよう.
まずは, ROTTAY 22key に接続せず, 基板のみでこの基板上のスイッチでなんらかの Report (key code) を送信する事にし, とりあえず "a" を送る code を書いた. これは単に 0x00, 0x00, 0x04, 0x00, ... の 8 bytes を送るだけで, 難無く送れた. 0x04 部分が USB HID の key code で "a" に相当するものである. しかし, USB を PC に挿して送信できるまでに USB を認識するところで reset 出まくりっぽい挙動をしており, その調整が必要である. また, Windows 7 では全く認識しない. これは要調査である. まさか IAD descript を使っているからか?
USB HID で report を受信できたので, 次は実際に 22key に接続し, key を scan し, それら key に対応した report を送信でき様にする. これにより
matrix key の読み込み
押された key から対応する key code を認識
key code の送信
の実装が必要になる.
key scan とくに問題ないが, key code を認識する所が面倒になる. と言うのも, どの key に key code を対応させるかを考える事になり, それはつまりその key にどの機能を割当るかと同等である. 今回 22key は左手で操作する事を検討しているが, home position や親指に近い方に重要な, もしくは良く操作する機能を assign するべきである. また 22 個の key しかないので, 拡張する為に "SHIFT" key も導入を検討した. 例えば grid 選択の順送りに対して逆は SHIFT を押すなどが可能である. とりあえずの assign はしているが, 頭で考えているだけではあまり意味がないので, 実際に回路を書いて, board data も書いて操作性を確認しようと考えている. 丁度この制御基板を書き key の assign の最適化をするのが良いのではないかと思っている (現状は reference board を使っている).
今は,
"5" に Auto zoom
"123" に部品関連
"789" に配線系
"+-=BS" に layer, grid
"ENTER" に SHIFT
を assign した. とりあえず pcbnew の assign をしたが, eeschema はまた違った assign が必要である. それもあり, 電卓 mark を押す事により, key code を eeschema 用, pcbnew 用の変更をできる様にもした. この 22key はすべての key top が青く光る仕様となっている為, どちらの key code になっているか分る様に pcbnew の key code が選らばれている場合には, 青く光らせている.
左側が eeschema 時, 右側が pcbnew 時
まだまだスカスカでもっと assign できるのだが必要であれば, どんどん assign していけば良いだろう. とにかく assign にはよく使う単品 command にするべきで
- 配線, 部品配置と良く使うものを assign (あたりまえだけだが)
- mouse の wheel でできる事は assign しない
- text の編集など通常の keyboard の操作が必要なものは assign しない
- 22key の組み合せ 2, 3 個で解決できるものは assign しない
(layer の内層切り替えは Cu.Top + NEXTにするとか)
ちなみに, key code の assign は人によって変更が必要になると思われるので, USB CDC の 簡易 shell にて, assign の変更ができる様にしておき, MCU 内部 EEPROM に記憶しおけば, 変更する毎に compile の必要はなくなるだろう. それもあって config descriptor は IAD descriptor を用いて CDC と HID の composite device としている.
そう言えば, 当初 22key の匡体が開けられないので, 横を切断した裏蓋を接着剤で止めたのが下の写真, 横から見ると不細工だが, 通常 key top しか見ないので問題ないだろう. とりあえずもう 1 台は必要なので, その時は最初から key top 部分のネジを外して裏蓋を開けよう.
2018年12月16日日曜日
STM32L072 の ROM area の Blank の値は 0x00 です.
タイトルの通り STM32L072 (STM32L0 系一般化できるのではないか) 0x08000000 から始まる ROM area (NVM) の Blank 時の値は 0x00 です. 0xff ではありません.
こんなん初めて見た. びっくりした.
bootloader, burning tool を STM32L0 系であれば, 0x00 は blank の値とする様に変更した.
こんなん初めて見た. びっくりした.
bootloader, burning tool を STM32L0 系であれば, 0x00 は blank の値とする様に変更した.
STM32L4 / L0 reference board の作成と USB の有効化 (やはり USB で trouble)
最近 STM32 を好んで使用しているが, STM32L0 系 L4 系の reference board の NUCLEO-64 などは chip の USB bus が USB コネクタに出力されていない. そこで, USB-uB と chip を載せた reference board の作成を行なった.基板の仕様は以下の通り
1. STM32 64pin chip (STM32L452RCT, STM32L0x2RBを対象)
2. USB-uB, USART1/2, I2C slave/master, SWD CN を実装可能
3. 3.3V, 1.8V DCDC (USBを使用する時は, 3.3V必須)
4. VCTCXO, MCP4725による周波数安定回路
5. LED 2個
当初 4層基板の検討をしたが, ひどい間違いで, ゴミ基板を作っても仕方がないので価格重視で両面基板にした. 2 枚集合でカットした後は, 20枚取れる事になるが, 機能的に 20 枚使用するだけの寿命があるかどうかは疑問...
現段階で, USB, USART1, SWD のみ確認済で, I2C は未検証である.
また問題点は以下の通り,
a. 1.8V, 3.3V DCDC の電圧調整用の分圧抵抗が 1個ずつなので, E24 ではあらい
出力側もしくは GND 側のどちらかは 2個にしておきたい.
b. DCDC (TLV62569) が 軽負荷すぎてか, リップルが 200mV程度あり
a は現状 1つの値を 9:1 になる様に 2つに分けるとして, b は LDOにするかどうしよう検討が必要である
この基板の最初の嫁ぎ先は, 先に書いた KICAD 専用 keyboard の controller として使用する予定だ. その為, USB HID class が必要で, 例の如く STMicro の標準の SDK は使用しないつもりなので, HID の実装が必要である. ただ, 以前他の CPU で digitizer の report を作成した事があるのでそれほど難易度は高くないと考えている. CPU は STM32L072 を使用した. もちろん HID の実装だけなので, L052 とか L032 で十分であるが, refernce board として高機能, memory 大きめの CPU を使用している. ただし, code を見て L052, L032 に移行できる様に, memory の使用を制限する予定である
HID の実装の準備としてまずは, USB の device desc, config desc を host pc に認識させる必要がある. 見た所 STM32L4 系と同じ usb module を使用していそうなので, usb driver は L4 系のものをそのまま使用した. 以前 H7 系で CRS を使用しないと, 挙動がおかしい事は経験済なので, これはあらかじめ code を書いておいた, しかし, USB 上の SOF が途中でなくなり通信ができなくなるので, USB 用 clock の HSI48 ならびに CRS の挙動を見てみると, MCO から出力される HSI48 の clock が徐々に周波数が低くなり, いずれ止ってしまうのを確認した. CRS が動作しているのにも係らずである.
Reference manual を確認すると, VREFINT と ENREF_HSI48 の bit を set する必要があるとの事, これらは SYSCFG module にあり, bit を set した. しかしそれでも HSI48 が不安定である. SYSCFG は clock gate を enable にした憶えがないので, RCC の SYSCFGEN を set し問題なく HSI48 が安定した.
STM32L072 (L0x2と一般化けいると思う) で USB を使用する時は,
A. RCC の USBEN を有効
B. RCC の SYSCFG を有効
C. SYSCFG の VREFINT, ENREF_HSI48 を有効
2018年12月3日月曜日
KICAD の short cut 専用 keyboardの作成 (準備)
現在 KICAD の short cut 専用 keyboard の作成の検討をしている. ただし, スイッチいちからを並べて組むのは面倒なのと見た目もそれほど良いと思えないので, テンキーの製品を購入して内部の MCU は取り外してしまい, 新たに MCU を接続し KICAD 専用としてみようと考えている.
検討している使用は以下の通り.
1. 市販の USB テンキー (実際はもっとある物を使用)
2. USB MCU (STM32L072)
3. USB HID keyboard + USB CDC(設定用)
4. PC に特殊 driver/tool が必要がない様にする
5. キーのトグルにより EESCHEMA と PCBNEW で使い分けられる様にする
6. USB CDC にてキーバインドを変更でき EEPROM に保存できる様にする
とりあえず, ROTTAY 22key を購入した. これにしたのは, key の個数もあるが, keyboard の台座部分がそれなりに空間がありそうで, 別途 MCU 基板を入れられると思ったからだ.
さっそく内部がどうなっているか見る為に, 開けようとするが, よくある裏面のステッカー部分やゴム足部分にネジがあるかと思ったがない, また匡体どうしのパッチン止めかとも思い力ずくでコジ開け様としたがだめだった. 仕方がないので, 側面をカットして内部を見える様にした.
やはり, かなりの空間があるので問題なく新たに基板は入れられそうだ.
しかしよく見ると, 匡体内部にボスが立っており, 押えにしては径が太い気がした. ボスが当っている部分を keyboard 側から見るとなんとネジがあり, それを外すと裏蓋が開きそうだったが, やってみると案の定なんなく裏蓋が空いた. はっきりいって側面を切る必要はなかった... 以下の写真は 2ヶ所しかないが, 1, 2, 3 key の下にも 2つネジがあります.
とにかくバラした感じは以下の通り.
基板は片面基板で, 配線同士がクロスする部分には積極的に 3220 サイズののコンダクタが使われている. もうちょっと最適化できるであろう部分があるが, スイッチの配置検討のまえに回路図や soft を fixしてしまったのではないかと思われる. あと, 幸いにも全体イルミ用 LED と NUM LOCK インジケータ LED は MCU で点灯制御ができる. であれば, eeschema 時は消灯, pcbnew 時には点灯など見た目を変えられそうだ (window manager にどれが focus 当っているか確認し, USB HID で MCU に設定すれば良いが, 現状そこまでする気はない).
ここまで分れば, hardware としては, keyboard と MCU を接続すれば良いのだが, STM32 の M0+, M4系の の NUCLEO 基板で USB が出ている物がなく, ちょっと前に基板作成に出した STM32L0xx, STM32L4xx の reference 基板を作成したので, それを入荷待ち状態である.
また software は,
a. Key 入力部
b. USB HID 部
c. USB CDC ならびに command parser 部
の開発が必要である.
USB HID は久しぶりで report の作り方などだいぶん忘れてしまった. まぁ OS をハングさせながら, ぼちぼち開発していけば良いかと考えている.
検討している使用は以下の通り.
1. 市販の USB テンキー (実際はもっとある物を使用)
2. USB MCU (STM32L072)
3. USB HID keyboard + USB CDC(設定用)
4. PC に特殊 driver/tool が必要がない様にする
5. キーのトグルにより EESCHEMA と PCBNEW で使い分けられる様にする
6. USB CDC にてキーバインドを変更でき EEPROM に保存できる様にする
とりあえず, ROTTAY 22key を購入した. これにしたのは, key の個数もあるが, keyboard の台座部分がそれなりに空間がありそうで, 別途 MCU 基板を入れられると思ったからだ.
さっそく内部がどうなっているか見る為に, 開けようとするが, よくある裏面のステッカー部分やゴム足部分にネジがあるかと思ったがない, また匡体どうしのパッチン止めかとも思い力ずくでコジ開け様としたがだめだった. 仕方がないので, 側面をカットして内部を見える様にした.
やはり, かなりの空間があるので問題なく新たに基板は入れられそうだ.
しかしよく見ると, 匡体内部にボスが立っており, 押えにしては径が太い気がした. ボスが当っている部分を keyboard 側から見るとなんとネジがあり, それを外すと裏蓋が開きそうだったが, やってみると案の定なんなく裏蓋が空いた. はっきりいって側面を切る必要はなかった... 以下の写真は 2ヶ所しかないが, 1, 2, 3 key の下にも 2つネジがあります.
とにかくバラした感じは以下の通り.
基板は片面基板で, 配線同士がクロスする部分には積極的に 3220 サイズののコンダクタが使われている. もうちょっと最適化できるであろう部分があるが, スイッチの配置検討のまえに回路図や soft を fixしてしまったのではないかと思われる. あと, 幸いにも全体イルミ用 LED と NUM LOCK インジケータ LED は MCU で点灯制御ができる. であれば, eeschema 時は消灯, pcbnew 時には点灯など見た目を変えられそうだ (window manager にどれが focus 当っているか確認し, USB HID で MCU に設定すれば良いが, 現状そこまでする気はない).
ここまで分れば, hardware としては, keyboard と MCU を接続すれば良いのだが, STM32 の M0+, M4系の の NUCLEO 基板で USB が出ている物がなく, ちょっと前に基板作成に出した STM32L0xx, STM32L4xx の reference 基板を作成したので, それを入荷待ち状態である.
また software は,
a. Key 入力部
b. USB HID 部
c. USB CDC ならびに command parser 部
の開発が必要である.
USB HID は久しぶりで report の作り方などだいぶん忘れてしまった. まぁ OS をハングさせながら, ぼちぼち開発していけば良いかと考えている.
登録:
投稿 (Atom)