🎃

2019/03/14 組み込み/BLE勉強会@社内

2022/05/24に公開

まず

  • 組込系の応答速度は10ms以内でないと操作性が欠けるような印象を与えてしまうから気をつけよう!

組込系の開発に必要な知識エリア(一部)

  • 電源の種別、性能、管理方法
    • AC電源
    • 蓄電池各種(リチウム電池など)
    • 電池
    • DC電池
  • 通信方式のバリエーションと特性
    • 無線
      • Wi-Fi
      • Bluetooth
      • 3G
        • 5Gがぼちぼち出るから使うとしたら微妙…
      • LPWA
      • 赤外線
    • 有線
      • Ethernet+TCP/IP
        • 定番
      • USB
      • RS232/422/485
        • シリアル通信
        • 工場とかいくとよくある
      • BNC
        • テレビのアンテナ線みたいな
      • CAN
        • 危険なところで使える
        • 乗り物の操縦系
      • UART
        • RS232の電気系が抜かれてるシンプルなやつ
      • SPI
      • I2C
        • SPIの後継として作られた
        • エラー検出機能付き
        • 残念ながらSPIよりノイズが乗ってしまう
        • ノイズによりデッドロックされてしまうこともある
      • I2S
      • LVDS
        • ディスプレイ周りで使われる
      • PCI Express
      • SD/MMC
      • SDカード
    • CPUの種類。特徴、ストレージデバイス
    • 各業界の勢力図、技術動向、各社の特徴
    • コミュニティ、技術動向
    • 実装技術

CPUのお話

CPUの大まかな種類

less than 16bit: 8051 / PIC / RL78

  • 独自のCコンパイラもしくはアセンブラ
  • 8051がブーム的に流行った時期もあった
    • 炊飯器とかに使われてた
  • RL78の消費電力の低さはやばい!!
    • 海外製品の1/3とか
    • 医療機器とかに使われていたり

32bit MPU: ARM Cortex-M / ARM Cortex-A / (ARM Cortex-R)

  • GCCもしくはARM製コンパイラ
  • IDEとしてEclipseが入ってる
  • ARM
    • ソフトバンクが買収した
    • CPUの設計図しか作ってない
      • 製造は他の半導体の会社
      • 半導体も作ってるのはintelとか
  • ARM Cortex-Aシリーズ
    • LinuxとかOSを入れて使う
    • LLVMベースのツールチェイン
    • バリエーションは複雑に沢山ある
    • パッケージはBGA(Ball Grid Array)が主流
      • 目視検査不可能
    • OS: Linux (yocto / Debian)
      • アプリケーションの開発は楽だけど、不完全な場合が多いのでちゃんとしたものを作るときは要確認
  • ARM Cortex-Mシリーズ
    • OSは入れないで使う
    • Mシリーズのがよく使われている
    • バリエーションはM4/ M3 / M0 / M0+
      • 数字が大きければ性能が良い感じ
    • パッケージはQFP(Quad Flat Package)が主流
      • ピンが全部見えてる場所にあるのではんだ付けが可能
        • 手でやることはないだろうけど出来なくはない…
      • ボードの製造コストを下げることができる
    • OS: ベアメタル / FreeRTOS+lwip

変わり種

  • XMOS(32core concurrent MPU)
    • coreが32個ある
    • 超並列で動かす
    • Amazonの音声信号とかで使われてる
  • Tensilica Xtensa (ESP32)

ソフトウェア開発のお話

良くあるのはEclipse + GCC toolchain

C言語のハードル

  • ベアメタルやFreeRTOSでのプログラム構造
    • 初期化部 + メインループ(イベント・ドリブン)
  • ビット演算
  • リングバッファと割り込みの為の並列制御ロジック
  • メモリーを動的にアロケーションしない
    • ヒープメモリを使わない、とはどういうことか
  • リアルタイム処理
    • ハード・リアルタイム
    • ソフト・リアルタイム

Unit Testing

  • Eclipse + GCC toolchainだとユニットテストできないものと考えていいぐらい
  • テストの種類
    • Test Double
      • mockを使ってやってる感じ
      • 制約事項が多め
    • cmake + CLion
    • Clean Architecture

Build / Deploy

  • できるだけ自動化する
  • ハードウェアへの安全で簡便なリリース方法を検討する
  • ファームウェアのバージョン管理を確実に行う

BLE、どこから使うか

ESP3

  • Bluetooth BLE / BR/EDR
  • サンプルコードがない
  • けどよく使われている
  • Bluetoothと一緒にWi-Fiに対応している
  • Bluetoothでなにか検証する程度ではおすすめ
    • 業務で使うにはちょっと動作が怪しい
  • 値段も比較的安め

Konashi

  • BLE
    • iOSなどと組み合わせて色々使える
  • Javascript
  • インターフェイスに制限あり
    • ADC
    • I2C
    • UART
    • PWN

NXP LPC シリーズ / mbed

  • 真面目に使うとなるとココらへん
GitHubで編集を提案

Discussion