自作キーボードの要となるファームウェアの作成に取り組みました。キーボードとしての基本機能に加え、トラックボールのPS/2通信処理やBluetooth通信の実装が中心です。ここでは、使用したツールや実装時の課題とその解決方法を詳しく解説します。
作業環境と使用ツール
Analog Discovery 2
PS/2信号を確認しながら作業を進めるため、DIGILENT社のAnalog Discovery 2を使用しました。信号の可視化により、通信エラーの特定が容易になりました。
参考にしたコードや資料
ファームウェア開発を効率化するため、以下の資料やコードを参考にしました
- Arduino関連
- PS/2通信の基礎
- キーボードスキャン処理
- キーコードとHID仕様
- PS/2デバイス通信処理
- Bluetooth通信
- 使用したBLEライブラリ:BLEHidAdafruit
- BLEHidAdafruitのサンプルコード:
- キーボード用サンプル
- マウス用サンプル
作成したファームウェアの概要
多くのPS/2サンプルコードはリモートモード(ホストがデータを要求する)で動作していました。しかし、この方式では数回のデータ送信後に通信が停止する問題が発生しました。
解決策としてストリーミングモード(デバイスが定期的にデータを送信)に変更。これにより、通信が安定しました。
setup
loop
CLOCK LO(FALLING)割り込み
データサンプリング性能の改善
目標は1秒100サンプルでしたが、初期状態では1秒34サンプルしか実現できませんでした。以下の工夫により80サンプル/秒まで性能を向上させました:
Bluetoothの帯域を最大化
BLE通信の設定を調整し、送信効率を向上させました。
BluefruitのconfigPrphBandwidthで BANDWIDTH_MAX を指定しました。
取りこぼし対策の実装
CLOCKがHIになる時間を監視し、サンプル間隔に近いタイミングがあればデータの切れ目と判断して、新しいデータ待機処理に移行。
• データ取りこぼしの検知にはストップビットやパリティビットを使用しました。
割り込み処理の活用
PS/2のCLOCK信号の状態変化時に割り込みを発生させることで、効率的にデータを取得する仕組みを導入しました。
次に向けて
次回は回路設計とPCB作成に進みます。
このような画面のロジアナ機能を活用して、PS/2の信号を確認しました。