📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

ページの作成:「== 概要 == <br><br> == 使用可能なUSBコントローラ == MSP430F149はUSBコントローラを内蔵していないため、USB通信を実装するにはPDIUSBD12等の外付けのUSBコントローラチップが必要となる。<br> # MSP430マイコンとPDIUSBD12 (USBコントローラIC) はパラレルバス接続 (8ビットデータバス + 制御信号) [MSP430F149] <--> [PDIUSBD12] <--> [USBコネクタ] <br> ただし、PDIUSBD12は現在…」
 
編集の要約なし
1行目: 1行目:
== 概要 ==
== 概要 ==
MSP430F149は、USB機能を内蔵していないため、外付けのUSBコントローラIC (PDIUSBD12等) を使用してUSB通信を行うことができる。<br>
PDIUSBD12は、USB 1.1規格に対応したペリフェラルコントローラICで、8ビットパラレルバスを介してMSP430F149と接続する。<br>
<br>
主な接続構成は以下の通りである。<br>
[MSP430F149] <--(8bit Data + Control)--> [PDIUSBD12] <--> [USB Connector]
<br>
ただし、PDIUSBD12は入手が困難となっており、新規設計では以下を推奨する。<br>
* USB機能内蔵マイコン (MSP430F5xxx、MSP432シリーズ) への移行
* USB-UARTブリッジIC (FT232RL、CP2102N等) の使用
<br>
USB-UARTブリッジICを使用する方法は、実装が容易で、MSP430F149のUSART0/USART1を利用でき、ホスト側のドライバサポートも充実している。<br>
<br><br>
<br><br>


== 使用可能なUSBコントローラ ==
== 使用可能なUSBコントローラ ==
MSP430F149はUSBコントローラを内蔵していないため、USB通信を実装するにはPDIUSBD12等の外付けのUSBコントローラチップが必要となる。<br>
MSP430F149はUSBコントローラを内蔵していないため、USB通信を実装するにはPDIUSBD12等の外付けのUSBコントローラチップが必要となる。<br>
# MSP430マイコンとPDIUSBD12 (USBコントローラIC) はパラレルバス接続 (8ビットデータバス + 制御信号)
[MSP430F149] <--> [PDIUSBD12] <--> [USBコネクタ]
<br>
<br>
ただし、PDIUSBD12は現在入手が難しくなってきており、新規設計では推奨されない。<br>
ただし、PDIUSBD12は現在入手が難しくなってきており、新規設計では推奨されない。<br>
16行目: 24行目:
入手可能な主なUSBコントローラチップを以下に示す。<br>
入手可能な主なUSBコントローラチップを以下に示す。<br>
<br>
<br>
Microchip<br>
Microchip社<br>
* MCP2200
* MCP2200
*: USB-UARTコントローラ
*: USB-UARTコントローラ
24行目: 32行目:
*: USBハブコントローラ
*: USBハブコントローラ
<br>
<br>
FTDI<br>
FTDI社<br>
* FT232RL / FT232H
* FT232RL / FT232H
*: USB-UARTコントローラ (産業標準的な製品)
*: USB-UARTコントローラ (産業標準的な製品)
32行目: 40行目:
*: クワッドUSB-UART/FIFO
*: クワッドUSB-UART/FIFO
<br>
<br>
WCH<br>
WCH社<br>
* CH340
* CH340
*: 低コストのUSB-UARTコントローラ
*: 低コストのUSB-UARTコントローラ
38行目: 46行目:
*: 汎用USBインターフェースコントローラ
*: 汎用USBインターフェースコントローラ
<br>  
<br>  
Silicon Labs<br>
Silicon Labs社<br>
* CP2102N
* CP2102N
*: USB-UARTブリッジ
*: USB-UARTブリッジ
129行目: 137行目:
# データを読み書き
# データを読み書き
#: A0=1、RD#またはWR#をパルス
#: A0=1、RD#またはWR#をパルス
<br><br>
== サンプルコード ==
==== ハードウェア接続 ====
MSP430F149のP2ポート (P2.0〜P2.7) を8ビットデータバスとして使用して、P3ポートを制御信号として使用する。<br>
<br>
<center>
{| class="wikitable"
|+ ピン接続表
! MSP430F149 !! PDIUSBD12 !! 機能 !! 説明
|-
| style="text-align:center;" | P2.0 || style="text-align:center;" | D0 || データバス || データビット0
|-
| style="text-align:center;" | P2.1 || style="text-align:center;" | D1 || データバス || データビット1
|-
| style="text-align:center;" | P2.2 || style="text-align:center;" | D2 || データバス || データビット2
|-
| style="text-align:center;" | P2.3 || style="text-align:center;" | D3 || データバス || データビット3
|-
| style="text-align:center;" | P2.4 || style="text-align:center;" | D4 || データバス || データビット4
|-
| style="text-align:center;" | P2.5 || style="text-align:center;" | D5 || データバス || データビット5
|-
| style="text-align:center;" | P2.6 || style="text-align:center;" | D6 || データバス || データビット6
|-
| style="text-align:center;" | P2.7 || style="text-align:center;" | D7 || データバス || データビット7
|-
| style="text-align:center;" | P3.0 || style="text-align:center;" | A0 || 制御信号 || アドレス選択<br><br>0 : コマンド<br>1 : データ
|-
| style="text-align:center;" | P3.1 || style="text-align:center;" | RD# || 制御信号 || リード信号<br>(アクティブLow)
|-
| style="text-align:center;" | P3.2 || style="text-align:center;" | WR# || 制御信号 || ライト信号<br>(アクティブLow)
|-
| style="text-align:center;" | P3.3 || style="text-align:center;" | CS# || 制御信号 || チップセレクト<br>(アクティブLow)
|-
| style="text-align:center;" | P3.4 || style="text-align:center;" | RESET# || 制御信号 || リセット信号<br>(アクティブLow)
|-
| style="text-align:center;" | P1.2 || style="text-align:center;" | INT_N || 割り込み || 割り込み信号<br>(アクティブLow)
|}
</center>
<br>
==== メインプログラム ====
<syntaxhighlight lang="c">
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;        // ウォッチドッグタイマの停止
    // DCO設定 (約8[MHz])
    BCSCTL1 = RSEL0 | RSEL1 | RSEL2;
    DCOCTL = DCO0 | DCO1 | DCO2;
    pdiusbd12_init();                // PDIUSBD12初期化
    __enable_interrupt();            // グローバル割り込み有効
    while (1) {
      __bis_SR_register(LPM0_bits + GIE);  // 低消費電力モード
    }
}
</syntaxhighlight>
<br>
==== GPIO初期化 ====
<syntaxhighlight lang="c">
void pdiusbd12_gpio_init(void)
{
    DATA_PORT_DIR = 0xFF;            // P2を出力に設定
    CTRL_PORT_DIR |= 0x1F;            // P3.0〜P3.4を出力に設定
    CS_HIGH(); RD_HIGH(); WR_HIGH();  // 制御信号を初期化
    INT_PORT_DIR &= ~BIT2;            // P1.2を入力に設定
    INT_PORT_IE |= BIT2;              // 割り込み有効化
}
</syntaxhighlight>
<br>
==== PDIUSBD12デバイスの初期化 ====
<syntaxhighlight lang="c">
void pdiusbd12_init(void)
{
    pdiusbd12_gpio_init();          // GPIO初期化
    pdiusbd12_reset();              // ハードウェアリセット
    // Set Modeコマンド (クロック有効、割り込み有効)
    pdiusbd12_write_command(0x02);  // CMD_SET_MODE
    pdiusbd12_write_data(0x0E);      // モード設定
    pdiusbd12_write_data(0x00);
    // Endpoint Enableコマンド
    pdiusbd12_write_command(0x01);  // CMD_ENDPOINT_ENABLE
    pdiusbd12_write_data(0x01);
    // ソフトコネクト有効化 (USBバスに接続)
    pdiusbd12_write_command(0x02);
    pdiusbd12_write_data(0x1E);      // SoftConnect有効
    pdiusbd12_write_data(0x00);
}
</syntaxhighlight>
<br>
==== コマンド / データ読み書き ====
<syntaxhighlight lang="c">
// コマンド送信
void pdiusbd12_write_command(uint8_t cmd)
{
    CS_LOW(); A0_LOW();              // CS=Low, A0=0 (コマンド)
    DATA_PORT_OUT = cmd;            // コマンドを出力
    WR_LOW(); WR_HIGH();            // WR#パルス
    CS_HIGH();                      // CS = High
}
// データ書き込み
void pdiusbd12_write_data(uint8_t data)
{
    CS_LOW(); A0_HIGH();            // CS=Low, A0=1 (データ)
    DATA_PORT_OUT = data;            // データを出力
    WR_LOW(); WR_HIGH();            // WR#パルス
    CS_HIGH();
}
// データ読み込み
uint8_t pdiusbd12_read_data(void)
{
    uint8_t data;
    DATA_PORT_DIR = 0x00;            // P2を入力に設定
    CS_LOW(); A0_HIGH();            // CS=Low, A0=1 (データ)
    RD_LOW();                        // RD#=Low
    data = DATA_PORT_IN;            // データを読み取り
    RD_HIGH();
    CS_HIGH();                      // CS = High
    return data;
}
</syntaxhighlight>
<br>
==== 割り込み処理 ====
<syntaxhighlight lang="c">
// PORT1割り込みハンドラ
#pragma vector=PORT1_VECTOR
__interrupt void Port1_ISR(void)
{
    if (INT_PORT_IFG & BIT2) {
      INT_PORT_IFG &= ~BIT2;      // フラグクリア
      // 割り込みステータスを読み出し
      pdiusbd12_write_command(0x0A); // CMD_READ_INTERRUPT_REG
      uint8_t int_lo = pdiusbd12_read_data();
      uint8_t int_hi = pdiusbd12_read_data();
      // セットアップパケット受信処理
      if (int_lo & 0x01) {
          usb_handle_setup_packet();
      }
    }
}
</syntaxhighlight>
<br>
==== USBセットアップパケット処理 ====
<syntaxhighlight lang="c">
void usb_handle_setup_packet(void)
{
    uint8_t setup[8];
    // セットアップパケットを読み出し
    pdiusbd12_select_endpoint(0);    // EP0選択
    pdiusbd12_write_command(0xF0);  // CMD_READ_BUFFER
    pdiusbd12_read_data();          // 予約バイト
    uint8_t len = pdiusbd12_read_data();
    for (int i = 0; i < len; i++) {
      setup[i] = pdiusbd12_read_data();
    }
    // リクエストに応じた処理
    uint8_t request = setup[1];
    if (request == 0x06) {        // GET_DESCRIPTOR
      usb_send_descriptor();
    }
    else if (request == 0x05) {    // SET_ADDRESS
        usb_set_address(setup[2]);
    }
}
</syntaxhighlight>
<br><br>
<br><br>


134行目: 320行目:
TIのMSP430シリーズには、USB機能を内蔵したマイコンがいくつか存在する。<br>
TIのMSP430シリーズには、USB機能を内蔵したマイコンがいくつか存在する。<br>
<br>
<br>
MSP430F5xxxシリーズ<br>
* MSP430F5xxxシリーズ : MSP430F5527 / MSP430F5528 / MSP430F5529等
* MSP430F5527 / MSP430F5528 / MSP430F5529
*: USB 2.0フルスピード (12[Mbps]) 対応
*: USB 2.0フルスピード (12[Mbps]) 対応
*: USBブートローダ機能搭載
*: USBブートローダ機能搭載