MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MSP430F149 - USBのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MSP430F149 - USB
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == MSP430F149は、USB機能を内蔵していないため、外付けのUSBコントローラIC (PDIUSBD12等) を使用してUSB通信を行うことができる。<br> PDIUSBD12は、USB 1.1規格に対応したペリフェラルコントローラICで、8ビットパラレルバスを介してMSP430F149と接続する。<br> <br> 主な接続構成は以下の通りである。<br> [[ファイル:MSP430F149 PDIUSBD12 BlockDiagram.jpg|フレームなし|中央]] <br> ただし、PDIUSBD12は入手が困難となっており、新規設計では以下を推奨する。<br> * USB機能内蔵マイコン (MSP430F5xxx、MSP432シリーズ) への移行 * USB-UARTブリッジIC (FT232RL、CP2102N等) の使用 <br> USB-UARTブリッジICを使用する方法は、実装が容易で、MSP430F149のUSART0/USART1を利用でき、ホスト側のドライバサポートも充実している。<br> <br><br> == 使用可能なUSBコントローラ == MSP430F149はUSBコントローラを内蔵していないため、USB通信を実装するにはPDIUSBD12等の外付けのUSBコントローラチップが必要となる。<br> <br> ただし、PDIUSBD12は現在入手が難しくなってきており、新規設計では推奨されない。<br> そのため、USBコントローラ機能が内蔵されているMSP430F5xxxシリーズやMSP432シリーズに移行、あるいは、USB-UARTブリッジIC (FT232RL等) を使用する。<br> <br> 特に、USB-UARTブリッジICを使用する方法は実装が容易であり、MSP430F149のUART機能 (USART0 / USART1) を利用できる。<br> また、USB-UARTブリッジICでは、ホスト側のドライバも広くサポートされている。<br> <br> 入手可能な主なUSBコントローラチップを以下に示す。<br> <br> Microchip社<br> * MCP2200 *: USB-UARTコントローラ * MCP2221/A *: USB-UART/I2Cコントローラ * USB2512B / USB2513B *: USBハブコントローラ <br> FTDI社<br> * FT232RL / FT232H *: USB-UARTコントローラ (産業標準的な製品) * FT2232H *: デュアルUSB-UART/FIFO * FT4232H *: クワッドUSB-UART/FIFO <br> WCH社<br> * CH340 *: 低コストのUSB-UARTコントローラ * CH375 *: 汎用USBインターフェースコントローラ <br> Silicon Labs社<br> * CP2102N *: USB-UARTブリッジ * CP2130 *: USB-SPIブリッジ <br> <u>※注意</u><br> * インターフェース要件 *: UART接続が必要な場合は、FT232RLやCP2102Nがよく使用されている。MSP430F149はUSART0 / USART1を搭載しているため、容易に接続可能である。 *: SPI / I2C接続が必要な場合は、MCP2221AやCP2130が適切である。MSP430F149はUSART1をSPIモードで使用できる。 *: <br> * 価格帯 *: CH340は低コスト *: FTDI、Microchipの製品は信頼性重視の中価格帯 *: <br> * 入手性 *: FTDI、Microchip、WCHの製品は世界的に流通が安定 *: <br> * 開発サポート * FTDI、Microchipの製品は豊富な開発ツールとドキュメントが利用可能であり、サポート体制が充実している。 <br><br> == MSP430F149の特徴 == MSP430F149は、Texas Instrumentsの16ビットRISCマイコンで、以下に示す特徴を持つ。<br> <br> * 60[KB] Flash ROM * 2[KB] RAM * 最大8[MHz]動作 (外部クロック使用時) * USART0 / USART1 (UART、SPI、I2C対応) * 12ビットADC * タイマA/B * 48ピン (LQFP、DIP) * 低消費電力設計 <br> <u>※注意</u><br> <u>MSP430F149は古い世代のマイコンであるため、新規設計ではMSP430F5xxxシリーズやMSP432シリーズへの移行を推奨する。</u><br> <br><br> == USBコントローラIC == ==== PDIUSBD12 ==== PDIUSBD12は、フィリップス社 (現NXPセミコンダクターズ) が開発したUSBペリフェラルコントローラICである。<br> <br> このICは、特に、マイコンベースのシステムにUSB機能を追加する時のインターフェースコントローラとして使用されてきた。<br> <u>ただし、このICは古い世代の製品であり、現在は新しい設計には一般的にUSB機能を内蔵したマイコンを使用することが多い。</u><br> <br> * USB 1.1規格に準拠しており、フルスピード (12[Mbps]) をサポートしている。 * 8ビットパラレルインターフェースを介してマイコンと接続可能。 * 内蔵のUSBトランシーバ * エンドポイント・バッファメモリを搭載 (Main Endpoint、Endpoint 1、Endpoint 2) * 低消費電力設計 * サスペンド/レジューム機能 <br> ==== PDIUSBD12とMSP430F149の接続 ==== PDIUSBD12とMSP430F149は、8ビットパラレルバスで接続する。<br> <br> 接続ピン<br> * D0-D7: * データバス (MSP430F149のP1.0〜P1.7 または P2.0〜P2.7) * A0 *: アドレス選択 (MSP430F149の任意のGPIO 例: P3.0) * RD# *: リード信号 (MSP430F149の任意のGPIO 例: P3.1) * WR# *: ライト信号 (MSP430F149の任意のGPIO 例: P3.2) * CS# *: チップセレクト (MSP430F149の任意のGPIO 例: P3.3) * INT_N *: 割り込み信号 (MSP430F149のP1.2等の割り込み対応ピン) <br><br> == PDIUSBD12のレジスタとコマンド == PDIUSBD12は、コマンドベースのインターフェースを持つ。<br> <br> 主要なコマンドを以下に示す。<br> * 0x00 : Set Address / Enable * 0x01 : Endpoint Enable * 0x02 : Set Mode * 0x03 : Set DMA * 0x0A : Read Interrupt Register * 0x0F : Read Last Transaction Status * 0x40 : Select Endpoint (Main Endpoint) * 0x41: Select Endpoint (Endpoint 1) * 0x42 : Select Endpoint (Endpoint 2) * 0xF0 : Read Buffer * 0xF1 : Write Buffer <br> 読み出し / 書き込み手順を以下に示す。<br> # コマンドを送信 #: A0=0、データバスにコマンドコード、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> ==== 通信フロー ==== [[ファイル:MSP430F149 PDIUSBD12 Flowchart.jpg|フレームなし|中央]] <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> == USBコントローラ搭載のMSP430マイコン == TIのMSP430シリーズには、USB機能を内蔵したマイコンがいくつか存在する。<br> <br> * MSP430F5xxxシリーズ : MSP430F5527 / MSP430F5528 / MSP430F5529等 *: USB 2.0フルスピード (12[Mbps]) 対応 *: USBブートローダ機能搭載 *: 内蔵LDO (USB用の3.3[V]電源回路) *: 豊富なペリフェラル (ADC、タイマ、UART等) *: 128[KB] フラッシュROM *: 8〜10[KB] RAM <br><br> == VBUSラインの電源フィルタ == USBコネクタにおいて、VBUS端子にLCフィルタ等の電源フィルタを構成する場合がある。<br> <u>これは、入力電源のリップル除去、負荷変動による電圧変動の抑制、デカップリング (高周波ノイズの除去) が目的である。</u><br> <br> [[ファイル:MSP430G2553 USB 1.png|フレームなし|中央]] <br> * USB 1.1 / 2.0の場合 *: フルスピード (12[Mbps])、ハイスピード (480[Mbps]) では比較的低周波であり、電源ノイズの影響が比較的少ないため、数10[uH]程度。 *: 一般的に47[uH]〜100[uH]のインダクタと、100[uF]程度のコンデンサを使用する。 * USB 3.x *: 電源の応答性確保および大きな電流 (900[mA]以上) に対応する必要があり、高速信号 (5[Gbps]以上) のため、より小さい値 (数十〜数百[nH]) を選択する。 *: インダクタの自己共振周波数 (SRF) にも注意が必要となる。 <br> インダクタ選定の注意<br> * シールドインダクタまたはフェライトコアを使用したインダクタを選定する。 * 定格電流は使用する電流の1.5倍以上を確保する。 * EMI規制への適合 * 寄生容量による影響 <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:MSP430]]
MSP430F149 - USB
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse