対象読者:本ガイドは、読書ペンの割り込み遅延予算を理解・検証する必要がある、ファームウェアエンジニア、リアルタイムシステムアーキテクト、OEM品質検査エンジニア向けです。遅延の発生源、当社が出荷する11モデル(B1、B2、F8、K7、KF1、L5、P2、Q6、Q8、T2、Y6)ごとのばらつき、OEM購入者が工場受入検査で測定すべき項目について解説します。
読書ペンはリアルタイムシステムです。ユーザーはタップから50ms以内に音声が再生されることを期待します。この予算は複数の割り込みに分割されます:OIDセンサーDMA完了、センサー用I²C割り込み、オーディオDAC DMA完了、電源管理割り込み、Wi-FiまたはBLE無線割り込み(該当する場合)。このいずれかが遅延予算を超えると、ユーザーは音飛びや遅延を感じ、最悪の場合ペンが反応しなくなります。
本記事では、当社ラインナップ全モデルにおける割り込み遅延予算の内訳、最悪ケース遅延を制限するために用いる手法、そしてOEM購入者が入荷ロットで実施できる具体的な工場受入テストを説明します。
1. 読書ペンの割り込み遅延予算
読書ペンには4つの重要な割り込みソースがあります。それぞれに予算が設定されています。いずれかのソースが予算を超えると、ユーザーエクスペリエンスが低下します。
| 割り込みソース | トリガー | レイテンシ予算 | 担当 |
|---|---|---|---|
| OIDセンサーDMA完了 | OIDページ取得完了 | ≤ 1,200 µs | OIDデコーダータスク |
| オーディオDAC DMA完了 | DACバッファ半分/満杯 | ≤ 800 µs | オーディオプレーヤータスク |
| バッテリーゲージアラート | 電圧/温度 | ≤ 4 ms | バッテリー監視タスク |
| BLE/Wi-Fi 無線 | RX 完了、TX 完了 | ≤ 6 ms | 無線スタック |
OIDセンサーの予算が最も厳しいのは、ユーザーがタップしたOIDの音声を待っているためです。オーディオDACの予算が次に厳しいのは、DMA補充が間に合わないと可聴クリック音が発生するためです。
2. モデル別割り込み遅延ベンチマーク
当社工場のQAステーションでは、割り込みライン上のGPIOトグルと500MHzロジックアナライザーを使用し、全モデルで割り込み遅延を測定しています。下記の数値は、25°C、3.7Vバッテリー、全周辺機器稼働下において、10,000回の割り込みで計測した最悪ケース値です。
| モデル | OIDセンサー ISR | オーディオ DMA ISR | バッテリー ISR | BLE/Wi-Fi ISR | 最悪ケース合成値 |
|---|---|---|---|---|---|
| B1 | 880 µs | 620 µs | 2.4 ms | n/a | 980 µs |
| B2 | 740 µs | 540 µs | 2.1 ms | n/a | 820 µs |
| F8 | 18 µs(カーネル) + 220 µs(タスク起床) | 22 µs + 180 µs | 1.6 ms | 4.8 ms | 380 µs |
| K7 | 320 µs | 240 µs | 1.8 ms | 2.4 ms | 410 µs |
| KF1 | 280 µs (デッドライン) | 220 µs | 1.6 ms | 2.2 ms | 360 µs |
| L5 | 22 µs (カーネル) + 280 µs (タスク起床) | 26 µs + 240 µs | 2.0 ms | 5.2 ms | 460 µs |
| P2 | 1,140 µs | 940 µs | 3.6 ms | n/a | 1,260 µs |
| Q6 | 760 µs | 580 µs | 2.2 ms | 2.6 ms | 880 µs |
| Q8 | 720 µs | 540 µs | 2.1 ms | 2.5 ms | 820 µs |
| T2 | 24 µs (カーネル) + 260 µs (タスク起床) | 26 µs + 220 µs | 2.0 ms | 5.4 ms | 440 µs |
| Y6 | 22 µs (カーネル) + 280 µs (タスク起床) | 26 µs + 240 µs | 2.0 ms | 5.2 ms | 460 µs |
P2のOIDセンサーISRレイテンシは最も高く(1,140 µs)、これはP2が64 MHzのCortex-M0+で動作しDMAを搭載していないためで、OIDセンサー割り込みがビジーループによるデコードを発生させ、1 msを要します。P2は当社の最も低コストなSKUでもあり、5ドル未満のOID書籍向けにこのレイテンシを受け入れています。
3. OIDセンサー割り込みの構造
OIDセンサーは読み上げペンにおいて最もレイテンシに敏感なペリフェラルです。B2ファームウェア 2.4.7における流れは次の通りです:
- t=0: ユーザーがOIDドット上にペンをタップする。
- t=0–8 ms: OIDセンサーが30 fpsで12フレームをキャプチャし、内部バッファを満たす。
- t=8 ms: OIDセンサーがSoCに対してDMA完了割り込みをアサートする。
- t=8 ms + 740 µs: OIDデコーダータスクが起床する(これがワーストケースのISRレイテンシ)。
- t=8.74 ms: OIDデコーダーがDMAバッファから12フレームを読み出す。
- t=8.74 ms + 14 ms: OIDデコーダーアルゴリズムがページIDを返す。
- t=22.74 ms: オーディオプレーヤータスクがページIDを受信する。
- t=22.74 ms + 6 ms: オーディオプレーヤーがMP3ファイルを開き、再生を開始する。
- t=28.74 ms: ユーザーは音声を聞き取ります。
ユーザーが体感する合計遅延時間は28.74 msとなり、50 msという目標を十分に達成しています。最大の要因はOIDデコードアルゴリズム(14 ms)で、次に音声ファイルのオープン処理(6 ms)が続きます。
4. 音声DMA割り込みとバッファアンダーラン
音声DAC DMA割り込みは2番目に厳しい予算項目です。B2ファームウェア2.4.7では、音声バッファは16 kHzモノラル(32 KB/秒データレート)の4 KBピンポンDMAバッファとなっています。バッファは64 ms(ハーフバッファ)ごと、および128 ms(フルバッファ)ごとに補充されます。
| 音声バッファ状態 | 対応 |
|---|---|
| バッファ残量 75 % 以上 | 通常再生 |
| バッファ残量 50–75 % | 音声タスクの優先度を100 ms間引き上げ |
| バッファ残量 25–50 % | ログの詳細度を下げ、BLEトラフィックを削減 |
| バッファ残量 25 % 未満 | OIDデコードを一時停止し、音声を補充 |
| バッファ残量 10 % 未満 | 100 msの無音を再生し、音声アンダーランイベントを記録 |
アンダーランイベントはファームウェアログで追跡しています。アンダーラン発生率の目標は10,000タップあたり1イベント未満です。2023年以降に出荷した47,000台以上の端末において、当社フリート全体のアンダーラン発生率は0.018 %、つまり約5,500タップに1回のアンダーランとなっています。
5. ワイヤレススタックの割り込みレイテンシ
BLEおよびWi-Fiの割り込みは、読書ペンにおいては最もレイテンシの影響を受けにくい要素ですが、長時間音声タスクをプリエンプトすると音声のグリッチを引き起こす可能性があります。当社ではF8、L5、T2、Y6にワイヤレス共存(WCI)インターフェースを搭載し、この問題に対応しています。
WCIインターフェースはWi-Fi無線とBLE無線を接続する4本のアービトレーションバスです。音声タスクがアンテナを必要とする場合、WCIリクエスト信号をアサートします。Wi-Fi/BLE共存シムは最悪ケースでも280 µs以内にアンテナの使用を許可します。これにより音声タスクは競合なく送信できます。
| ワイヤレスイベント | レイテンシ予算 | 緩和策 |
|---|---|---|
| BLE接続イベント | 6 ms | WCIアービトレーション、優先度引き上げ |
| Wi-Fi TX 完了 | 5 ms | WCIアービトレーション、音声タスクのプリエンプション |
| Wi-Fi RX 完了 | 5 ms | 直接 DMA、プリエンプションなし |
| BLE アドバタイジング | 2 ms | TX ウィンドウ中のみオーディオをプリエンプト |
K7 および KF1 も類似の、よりシンプルな方式を採用しています。BLE 専用で、Wi-Fi なし、WCI 不要です。BLE スタックはオーディオプレーヤーよりも低い優先度で動作し、一度に最大 800 µs プリエンプトされます。
6. Linux SKU の ISR レイテンシが高くなる理由
Linux SKU は RTOS SKU よりも ISR レイテンシが高くなります。これは、カーネルが割り込みごとに処理する作業が多いためです。
- ハードウェア IRQ 発生(8〜12 µs)。
- カーネル IRQ ハンドラ実行(4〜8 µs)。
- Softirq/tasklet 実行 (4–8 µs)。
- タスクは waitqueue 経由で起床(4〜8 µs)。
- スケジューラがタスクを選択(1〜3 µs)。
- コンテキストスイッチ(2〜4 µs)。
合計で、ハードウェア割り込みからタスク実行まで 18〜24 µs です。RTOS SKU は ISR が直接タスクを起床できるため、手順 2 と 4 を省略します: xTaskNotifyFromISR または k_thread_resume.
Linux SKU では、以下で補正しています:
- オーディオタスクを専用 CPU コアに固定(
taskset). - T2 に PREEMPT_RT パッチを適用(ファームウェア 2.6.4)し、プリエンプションレイテンシを最悪ケース約 80 µs に低減。
- オーディオ用 CPU コアを一般スケジューラ負荷から分離(cgroup
cpuset).
7. 電源管理割り込み
バッテリー管理割り込みは、すべての SKU で最も低速です。これは、バッテリーゲージが 1 Hz でポーリングするためです。ゲージは次の場合にアラート割り込みを発生させます:
- 残量が 1 % 以上変化した場合。
- 電圧がしきい値(最低 3.3 V、フル 4.2 V)をまたいだ場合。
- 温度が -10 °C または +60 °C を超えた場合。
- ヘルスステータスの変化(バッテリー取り外しなど)。
PMICアラートの遅延は約2〜4msです。バッテリーモニタリングタスクは、LED輝度の調整、LCD(搭載されている場合)の減光、オーディオコーデックのバッテリー残量低下警告しきい値の更新で応答します。
8. 最悪複合レイテンシ
§2の「最悪複合」列は、最大負荷(オーディオ再生中、BLE接続中、Wi-Fiローミング中、OIDデコード中)の条件下で、割り込み発火からタスク実行までの合計時間を計測したものです。B2では820µs、K7では410µs、L5では460µsです。
当社は、最悪条件下でもOIDデコードがユーザー体感レイテンシ予算である50ms以内に確実に完了するようシステムを設計しています。各SKUの余裕は以下のとおりです。
| 型番 | 最悪複合レイテンシ | 予算 | 余裕 |
|---|---|---|---|
| B1 | 980 µs | 50,000 µs | 49,020 µs |
| B2 | 820 µs | 50,000 µs | 49,180 µs |
| F8 | 380 µs | 50,000 µs | 49,620 µs |
| K7 | 410 µs | 50,000 µs | 49,590 µs |
| KF1 | 360 µs | 50,000 µs | 49,640 µs |
| L5 | 460 µs | 50,000 µs | 49,540 µs |
| P2 | 1,260 µs | 80,000 µs | 78,740 µs |
| Q6 | 880 µs | 50,000 µs | 49,120 µs |
| Q8 | 820 µs | 50,000 µs | 49,180 µs |
| T2 | 440 µs | 50,000 µs | 49,560 µs |
| Y6 | 460 µs | 50,000 µs | 49,540 µs |
P2はタップ専用機でオーディオストリーミングの複雑さがなく予算が80msと長くなっています。
9. 割り込みレイテンシの工場受入検査
5,000本以上のReading Penを受領するOEMバイヤー様向けに、ご推奨の割り込みレイテンシ受入検査4ステップをご紹介します。検査は1本あたり約90秒で、ロジアナまたはオシロスコープとUSBケーブルが必要です。
- USBでPCにペンを接続し、OIDセンサー割り込みラインにGPIOプローブを接続します。
- 既知のOIDページにペンを50回タップします。
- GPIOの立ち上がりエッジからオーディオDAC DMA完了信号までの時間を計測します。
- 合格基準:95パーセンタイルレイテンシ ≤ 50 ms、99パーセンタイル ≤ 70 ms、最大値 ≤ 100 ms。
このテストは一般的な障害モードを検出します:DMAの構成ミス(レイテンシが200 msに跳ね上がる)、Wi-Fi共存バグ(Wi-Fi動作時にレイテンシが80 msに跳ね上がる)、バッテリーアラートの嵐(レイテンシが1秒ごとにスパイクする)。
10. 今後18か月で変更される点
3つの変更が予定されています。
- T2ファームウェア 2.7.0(Q3 2027予定)は、PREEMPT_RTパッチをデフォルトに切り替え、ISRレイテンシを最悪約80 µsに短縮します。
- K7ファームウェア 2.0.0は、nRF5340アプリケーションコアにハードウェアアシストによる割り込みルーティングを導入し、オーディオDMAレイテンシを240 µsから90 µsに短縮します。
- L5ファームウェア 4.3.0では、オーディオタスクに
SCHED_DEADLINEを導入し、最悪起動レイテンシを200 µsにバウンドします。
これらの変更により、11モデルの製品ラインアップ全体でRTOSとLinux間の割り込みレイテンシがより均一化され、B2とL5の間の4倍の差は従来の約2倍にまで縮まります。