modm (ダイヤルアップ「モデム」のように発音) は、組み込みデバイスに合わせたカスタム C++23 ライブラリを構築するためのツールボックスです。 modm は、ニーズに合わせて微調整できるモジュール式のカスタマイズ可能なプロセスで、スタートアップ コード、HAL とその実装、通信プロトコル、外部デバイス用のドライバー、および BSP を生成します。
このプロジェクトには、ディスカッション用のフォーラムと、より大きな設計コンセプトを文書化するための技術ブログもあります。
modm は、ユーロボット競技会の厳しい要件に合わせて最適化されています。そこでは、当社のロボットは、ゲームの 100 秒間、確実かつ完全に自律的に動作する必要があります。私たちのロボットには、多くのリソースを持たないさまざまなマイクロコントローラーが多数含まれているため、MODM は、小さいコード サイズと少ないメモリ消費、予測可能なプログラム フロー、極めて高い移植性など、さまざまな一連の目的を満たす必要があります。
ライブラリのソース コードは、互換性のあるライセンス (BSD、Apache2、MIT) に基づく外部ソース コードとともに MPLv2 としてライセンスされます。したがって、このプロジェクトを自由にフォークしてニーズに合わせて調整してください。私たちがあなたに求める唯一のことは、誰もが利益を得られるように変更を貢献していただくことです。
modm を再帰的にクローンしてください。すべてのサブモジュールが必要です。
git clone --recurse-submodules --jobs 8 https://github.com/modm-io/modm.git
modm は、次のベンダーの 3839 デバイス用の HAL を作成できます。
以下に、すべてのデバイス ファミリとそれらがサポートする周辺機器ドライバーを示した表を示します。
これは概要であり、特定のデバイスにはこの表にあるすべての周辺機器が搭載されていない可能性があることに注意してください。特定のデバイス用の modm の周辺機器ドライバーを見つけてください。
STM32 | サム | RP | で | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
周辺 | C0 | F0 | F1 | F2 | F3 | F4 | F7 | G0 | G4 | H7 | L0 | L1 | L4 | L5 | U5 | D1x D2x DAx | D5x E5x | E7x S7x V7x | G5x | 20 | 90 | メガ | 小さい |
ADC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ |
できる | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ✅ | ✕ | ✕ | ○ | ○ | ✕ |
コンパレータ | ✕ | ○ | ✕ | ✕ | ✅ | ✕ | ✕ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ |
DAC | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✕ | ✕ | ✕ | ○ | ✕ |
DMA | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✕ | ✅ | ✕ | ✕ | ✕ |
イーサネット | ✕ | ✕ | ○ | ○ | ✕ | ✅ | ✅ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
外部割り込み | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ |
外部メモリ | ✕ | ✕ | ✅ | ✅ | ✕ | ✅ | ○ | ✕ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
GPIO | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
I2C | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ✅ | ✅ |
内蔵フラッシュ | ○ | ○ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ✕ | ✕ |
IWDG | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
ランダムジェネレータ | ✕ | ✕ | ✕ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
SPI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
システムクロック | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ |
タイマー | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ |
UART | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ |
固有のID | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
USB | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✕ | ✕ | ✕ |
私たちは少数の開発者チームにすぎず、ハードウェアでサポートおよびテストできるデバイスの数は限られています。ディスカッションを開いて、特定のデバイスがそのままサポートされているかどうか、またそれ以外の場合はどのように追加できるかを尋ねます。
当社では、ドキュメントを含む多くの開発ボードに対するすぐに使用できるサポートを提供しています。
アル・アヴレブ・カン | Arduino NANO | Arduino UNO | ブラックピル F103 |
ブラックピル F401 | ブラックピル F411 | ブルーピル F103 | DEVEBOX-STM32F4XX |
DEVEBOX-STM32H750VB | ディスコ-F051R8 | ディスコ-F072RB | ディスコ-F100RB |
ディスコ-F303VC | ディスコ-F401VC | ディスコ-F407VG | ディスコ-F411VE |
ディスコ-F429ZI | ディスコ-F469NI | ディスコ-F746NG | ディスコ-F769NI |
ディスコ-L152RC | ディスコ-L476VG | フェザーM0 | フェザーM4 |
フェザー-RP2040 | メガ-2560-プロ | ヌクレオ-C031C6 | ヌクレオ-F031K6 |
ヌクレオ-F042K6 | ヌクレオ-F072RB | ヌクレオ-F091RC | ヌクレオ-F103RB |
ヌクレオ-F303K8 | NUCLIO-F303RE | ヌクレオ-F334R8 | NUCLIO-F401RE |
NUCLIO-F411RE | ヌクレオ-F429ZI | ヌクレオ-F439ZI | ヌクレオ-F446RE |
ヌクレオ-F446ZE | ヌクレオ-F746ZG | ヌクレオ-F767ZI | ヌクレオ-G070RB |
ヌクレオ-G071RB | NUCLEO-G431KB | ヌクレオ-G431RB | NUCLIO-G474RE |
ヌクレオ-H723ZG | ヌクレオ-H743ZI | ヌクレオ-L031K6 | ヌクレオ-L053R8 |
ヌクレオ-L152RE | ヌクレオ-L432KC | ヌクレオ-L452RE | ヌクレオ-L476RG |
ヌクレオ-L496ZG-P | NUCLEO-L552ZE-Q | ヌクレオ-U575ZI-Q | オリメキシノ-STM32 |
ラズベリーパイピコ | SAMD21-MINI | SAMD21-XPLAINED-PRO | SAME54-XPLAINED-PRO |
SAME70-XPLAINED | SAMG55-XPLAINED-PRO | SAMV71-XPLAINED-ULTRA | スマートレスポンスXE |
STM32-F4VE | STM32F030-デモ | シングプラス-RP2040 |
また、I 2 C、SPI、UART、BitBang などを介して接続された外部デバイス用に完全にターゲットに依存しないドライバーも多数用意しています。これらのほとんどはデバイス全体にアクセスできるため、特定のニーズに合わせて簡単に構成できます。
AD7280A | AD7928 | ADIS16470 | ADNS9800 | ADS101X | ADS7828 |
ADS7843 | ADS816x | AMS5915 | APA102 | AS5047 | AS5600 |
AT24MAC402 | SPIフラッシュ | BME280 | BMI088 | BMP085 | BNO055 |
CAT24AA | サイクルカウンター | DRV832X | DS1302 | DS1631 | DS18B20 |
DW3110 | EA-DOG | エンコーダ入力 | エンコーダ入力 BitBang | エンコーダ出力 BitBang | FT245 |
FT6x06 | GPIOサンプラー | HCLAx | HD44780 | HMC58x | HMC6343 |
HX711 | I2C-EEPROM | ILI9341 | IS31FL3733 | ITG3200 | IXM42XXX |
L3GD20 | LAN8720A | ラウィセル | LIS302DL | LIS3DSH | LIS3MDL |
LM75 | LP503x | LSM303A | LSM6DS33 | LSM6DSO | LTC2984 |
MAX31855 | MAX31865 | MAX6966 | MAX7219 | MCP23x17 | MCP2515 |
MCP3008 | MCP7941x | MCP990X | MMC5603 | MS5611 | MS5837 |
ノキア5110 | NRF24 | TFTディスプレイ | PAT9125EL | PCA8574 | PCA9535 |
PCA9548A | PCA9685 | QMC5883L | SH1106 | シーメンス-S65 | シーメンス-S75 |
SK6812 | SK9822 | SSD1306 | ST7586S | ST7789 | STTS22H |
STUSB4500 | SX1276 | SX128X | TCS3414 | TCS3472 | TLC594x |
TMP102 | TMP12x | TMP175 | タッチ2046 | VL53L0 | VL6180 |
WS2812 |
テストされたターゲットとドライバーの完全なリストについては、例を参照してください。
あなたにとって最も簡単な方法であり、何か不明な点や欠落がないかどうかを確認するための最良の方法は、ライブラリを使用してバグレポートを提出してフィードバックを送っていただくか、すでにプルリクエストを開いている修正があるかどうかです。
貢献ガイドラインについては、CONTRIBUTING.md を参照してください。
modm プロジェクトは Niklas Hauser (@salkinium)、Raphael Lehmann (@rleh)、Christopher Durand (@chris-durand) によって維持されており、Sascha Schade (@strongly-typed)、Fabian Greif (@dergraaf)、Kevin からの多大な貢献があります。 Läufer (@ekiwi)、Martin Rosekeit (@thundernail)、Daniel Krebs (@daniel-k)、 Georgi Grinshpun (@georgi-g)、David Hebbeker (@dhebbeker)、Thorsten Lajewski (@TheTh0r)、Mike Wolfram (@mikewolfram)、その他多くの寄稿者。