組み込みデバイスドライバ

組み込みデバイスドライバは難しいと言われています。ハードウェアの知識が必要なこと、タイミングが難しいこと、さまざまな理由があります。弊社では長年培ってきた組み込みデバイスドライバの技術により、お客様のお手伝いをさせて頂き、お客様の製品化のスピードUPに寄与致します。

組み込みデバイスドライバとは?

◎組み込み機器システムは以下のような構成になります。

■アプリケーション
ユーザーシステムの機能を実現するためのソフトウェアです。例えば液晶に何かを表示したり、TCP/IPからデータを受信したり送信したりする、などになります。
■ミドルウェア
TCP/IPやFileSystemなど規格(プロトコル)に沿ったソフトウェアです。ユーザーがプロトコルソフトウェアを開発するのは大変なので、一般的には市販のミドルウェアを購入したりしてシステムに組み込みます。
■OS
アプリケーション、ミドルウェア、デバイスドライバなどを動かすための組み込み用のOSです。ITRON、LINUX、WindowsCEなどがあります。
■デバイスドライバ
ハードウェアを制御するためのソフトウェアです。Ether、USB、CANなどのコントローラや特殊用途のFPGA、ASICをアクセスするために、上位側ソフトウェアに扱いやすい手順を提供します。
■ハードウェア
ソフトウェアが動くためのハードウェアです。CPU、各種コントローラ、FPGA、周辺ロジック回路があります。

ドライバの種類と概要

イーサネットドライバ
SDドライバ
USBドライバ
カメラドライバ
GPIBドライバ
SCSIドライバ
ATAドライバ
PCIドライバ
モータドライバ
キーマトリックスドライバ

現場の声:「難しさ」について

何故組み込みデバイスドライバは難しいのか?
デバイスドライバの難しさを現場から聞いてみました

  • ハードウェアを制御するので、とにかくとっつきにくい。
  • レジスタによっては、設定後waitが必要だったりするが、何故waitが必要か分からない。
  • 外部端子がマルチプレクスされていたりして、マルチプレクスされているかどうか調べ、次にその設定方法を調べる必要がある。設定方法もプルアップとかWakeUPなどがあり、回路図を調べたりする必要があり、システムを知らないと出来ない。
  • 時間設定が必要だったりするが、基準となるシステムクロックから調べる必要がある。
  • ハードウェアの動きを理解出来ないと、ちゃんと制御できない。
  • SDRAMの設定や外部デバイスとのDMA設定など、相手側のハードウェア仕様を知らないと、設定することが出来ない。
  • コントローラが複雑になってくると、非常に沢山のレジスタがあり、機能分けしてブロック図にしないと、レジスタの意味を理解出来ない。
  • ソフトウェアで送受信制御を行う場合、マニュアルにフローが無い場合には、コントローラの機能から想像して、フローを作成する必要があり、深い理解が必要になる。
  • ARM系のMPUの割り込みの場合、ARMコアの割り込みと割り込みコントローラの割り込みと周辺コントローラの割り込みの3つがあり、どういう順番で制御すれば良いか分からない。
  • マニュアルに書いてあることが良く理解出来ない。
  • 英語(カタカナ)が多くてその単語の意味が分からない。
  • マニュアルが英語であることが多い。
  • 海外物のデバイスのマニュアルは当然ながら全部英語。日本語マニュアルでも理解が難しいのに、英語マニュアルだとお手上げ。
  • そんな中で日本語マニュアルに出会うとほっとする。
  • ハードウェアが期待通りに動作しているか、見えない部分が多く良く分からない。
  • ソフトウェアからは、最後の結果しか分からない。結果が悪かった場合に、どのレジスタ設定が悪くて動作していないのか分からない。
  • 一つのハードウェア(コントローラ)に精通しても、別のコントローラでは制御方法が全然違うことが多く、コントローラが変わったら作り直す必要がある。
  • Ether、USB、SDなど各種コントローラがある。標準化されている物も中にはあるが、独自仕様の物も多く、コントローラが変わったら作り直しになる。
  • プロトコルがからむことが多く、プロトコルも理解する必要がある。
  • TCP/IP、USBなどプロトコルも理解し、アナライザも必要。プロトコルを理解していないとアナライザを見てもよく分からない。
  • プロトコルの仕様は英語であることが多く、本気でプロトコルを理解しようとしたら、英文の仕様書から読む必要がある。
  • コントローラの機能だけでなく、DMAや割り込み、更にキャッシュ、MMUが絡んでくることがあり、多方面の知識が必要になる。
  • 送受信をDMAで行う場合、データ転送にはキャッシュの設定が必要になるし、キャッシュの設定のためにはMMUの設定も必要になるし、割り込みも必要になる、と次々と他の知識が必要になる。
  • MPU内蔵のコントローラでも、DMAを行う場合にはDMAの章を調べる必要があり、マニュアルのあっちこっちを調べる必要がある。
  • デバイスドライバの性能が悪いと、システムとしての処理速度が非常に遅くなる。
  • 下回りの性能が悪いと、途端に全体のスループットが落ちてしまうため、ドライバの性能が非常に重要。
  • ドライバとしては、その性能を充分に発揮するように、かつシステムとしてスループットを出せるように設計する必要がある。
  • 外部のデバイス等と非同期にアクセスすることがあり、タイミングが難しい。
  • 外部からの受信などが、内部の状態とは非同期に来ることがあり、どのタイミングでデータが来ても問題ないように設計する必要がある。
  • 割り込みが来るクリティカルなタイミングを頭の中で想像する必要がある。

ご提案

製品の独自の特色を出すのはアプリケーションです。お客様はここに注力して、アプリケーションから下のミドルウェア、OS、デバイスドライバはアウトソーシングすることを提案します。ミドルウェアは市販のミドルウェア、OSも市販のOS、そしてドライバは我々が作成します。そうすれば、お客様は、製品の特色を出すためのアプリケーション作成に力を注げます。

組み込みデバイスドライバについてはお気軽にご相談ください。