mcpField
P
peripherals-from-datasheet

peripherals-from-datasheet

github.com/mohitmishra786開発269296 回インストール18 週間前に更新
リポジトリ

peripherals-from-datasheet について

peripherals-from-datasheet は、MCU のリファレンスマニュアルに基づく周辺機器ドライバー作成をエージェント向けに案内します。ベアメタル開発、MCU ファミリー間の移植、HAL の検証に使え、レジスター定義、初期化順序、タイミングを扱います。

主な機能

  1. 01マニュアルからレジスター情報を特定
  2. 02レジスターマップに沿ったコード構成
  3. 03周辺機器の初期化順序の確認
  4. 04マニュアルを参照したビット定義
  5. 05タイミングとステータスフラグの遵守

活用シーン

  1. 01ベンダー HAL に頼らないドライバー作成
  2. 02MCU ファミリー間でのドライバー移植
  3. 03マニュアルに基づく HAL 動作の確認
  4. 04周辺機器の設定や転送障害の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill peripherals-from-datasheet

インストール後、Claude Code で/peripherals-from-datasheetを入力して読み込まれたか確認します。

詳細

データシートから周辺機器を実装する

目的

MCU のリファレンスマニュアルをもとに周辺機器ドライバーを作成するための、再現性のある手法をエージェント向けに説明します。レジスタマップの探し方、ビット定義の読み解き方、初期化シーケンスの確認方法、タイミング制約の遵守、保守しやすいレジスタレベルのコードの作成方法を扱います。ドキュメントのナビゲーション方法については、skills/baremetal/datasheet-and-refmanual-reading と併用してください(別々のスキルとして管理されています)。

使用する場面

  • ベンダー HAL を使わずにドライバーを作成する場合
  • MCU ファミリー間で周辺機器を移植する場合
  • HAL の動作をリファレンスマニュアルと照合する場合
  • サンプルによると「動作するはず」の周辺機器をデバッグする場合

ワークフロー

1. リファレンスマニュアルのナビゲーション
Typical RM structure
├── Memory map (peripheral base addresses)
├── Peripheral chapter (UART, SPI, GPIO, ...)
│   ├── Functional description
│   ├── Register map (table of offsets)
│   ├── Register bit definitions
│   └── Timing / electrical notes
└── Electrical characteristics (clock limits, setup/hold)

レジスタへの書き込みをコピーする前に、まずプログラミングモデルのセクションを確認してください。

2. レジスタマップの抽出
/* From RM — USART base 0x40004400 */
typedef struct {
    volatile uint32_t SR;   /* 0x00 status */
    volatile uint32_t DR;   /* 0x04 data */
    volatile uint32_t BRR;  /* 0x08 baud */
    volatile uint32_t CR1;  /* 0x0C control */
    /* ... */
} USART_TypeDef;

#define USART2 ((USART_TypeDef *)0x40004400UL)

オフセット列が構造体のレイアウト(予約語のパディングを含む)と一致することを確認してください。

3. 初期化シーケンスのチェックリスト
Peripheral bring-up order
├── 1. Enable bus clock (RCC/APB/AHB register)
├── 2. Reset peripheral (if RM requires)
├── 3. Configure pins (GPIO alternate function)
├── 4. Configure peripheral registers (mode, baud, etc.)
├── 5. Enable peripheral (UE, TE, RE bits)
├── 6. Enable NVIC IRQ (if interrupt-driven)
└── 7. Verify status flags before first transaction

悪い例 — クロックより先に UART を有効化:

USART2->CR1 |= USART_CR1_UE;  /* USART clock still off — no effect */
4. ビット定義の扱い
/* From RM: CR1 M[1:0], PCE, PS, TE, RE, UE */
#define USART_CR1_UE   (1U << 13)
#define USART_CR1_TE   (1U << 3)
#define USART_CR1_RE   (1U << 2)

監査証跡として、コメントに RM のセクション番号を記載してください。

5. タイミングとビジーウェイト
/* RM: poll BUSY flag until reset complete */
while (RCC->CR & RCC_CR_PLLRDY == 0)
    ;

電気的特性の章に記載されている起動時間(発振器の安定時間、PLL のロック時間)を守ってください。

6. 適切なドライバー構造と不適切なドライバー構造

良い例 — レイヤー化され、RM を参照:

void usart2_init(uint32_t baud) {
    rcc_enable_usart2();
    gpio_config_usart2_pins();
    usart2_set_baud(baud);
    USART2->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_UE;
}

悪い例 — マジックナンバーを使い、クロックを有効化しない:

*(uint32_t*)0x4000440C = 0x2000;  /* what peripheral? which bit? */
7. エージェントの使用例
/peripherals-from-datasheet Walk me through USART init from STM32 RM
/peripherals-from-datasheet What sections of the ref manual matter for SPI timing?

よくある問題

症状原因対処方法
周辺機器が動作しないクロックが有効化されていないまず RCC/APB の有効化ビットを設定する
ボーレートが正しくないPCLK の前提が誤っている実際のクロックツリーに基づいて再計算する
GPIO の AF が正しくない誤った表から MUX 値を取得しているピン配置と AF テーブルを照合する
IRQ が停止したままステータスフラグのクリア手順が誤っているRM の「フラグのクリア」サブセクションを確認する
データが気付かないうちに破損するエンディアンまたはアクセス幅が一致していないレジスタのアクセスサイズを一致させる

関連スキル

  • skills/baremetal/datasheet-and-refmanual-reading — RM をすばやくナビゲートする
  • skills/baremetal/mmio-and-bit-manipulation — レジスタアクセスのパターン
  • skills/baremetal/gpio-baremetal — 周辺機器を有効化する前にピンの MUX を設定する
  • skills/embedded/linker-scripts — メモリマップのアライメント

コメント