📢 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> | ||
<br> | <br> | ||
ただし、PDIUSBD12は現在入手が難しくなってきており、新規設計では推奨されない。<br> | ただし、PDIUSBD12は現在入手が難しくなってきており、新規設計では推奨されない。<br> | ||
| 16行目: | 24行目: | ||
入手可能な主なUSBコントローラチップを以下に示す。<br> | 入手可能な主なUSBコントローラチップを以下に示す。<br> | ||
<br> | <br> | ||
Microchip社<br> | |||
* MCP2200 | * MCP2200 | ||
*: USB-UARTコントローラ | *: USB-UARTコントローラ | ||
| 24行目: | 32行目: | ||
*: USBハブコントローラ | *: USBハブコントローラ | ||
<br> | <br> | ||
FTDI社<br> | |||
* FT232RL / FT232H | * FT232RL / FT232H | ||
*: USB-UARTコントローラ (産業標準的な製品) | *: USB-UARTコントローラ (産業標準的な製品) | ||
| 32行目: | 40行目: | ||
*: クワッドUSB-UART/FIFO | *: クワッドUSB-UART/FIFO | ||
<br> | <br> | ||
WCH社<br> | |||
* CH340 | * CH340 | ||
*: 低コストのUSB-UARTコントローラ | *: 低コストのUSB-UARTコントローラ | ||
| 38行目: | 46行目: | ||
*: 汎用USBインターフェースコントローラ | *: 汎用USBインターフェースコントローラ | ||
<br> | <br> | ||
Silicon | 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シリーズ | * MSP430F5xxxシリーズ : MSP430F5527 / MSP430F5528 / MSP430F5529等 | ||
*: USB 2.0フルスピード (12[Mbps]) 対応 | *: USB 2.0フルスピード (12[Mbps]) 対応 | ||
*: USBブートローダ機能搭載 | *: USBブートローダ機能搭載 | ||