今話題のAIでネット検索できるPerplexity $10ドル割引
[無料でホームページを作成] [通報・削除依頼]

LPC1114でUSB


LPC810を用いたHID-シリアルアダプターをLPC1114FN28/102に移植しました。
移植の過程でLPC810でのバグを見つけたので修正しました。前ページのLPC810のダウンロードファイルを更新しました。

2016.10.06 追記 添付のループバックホストプログラムにバグがありました。
         ボーレート115200を設定できない。
         修正版を以下にアップロードしました。
https://box.yahoo.co.jp/guest/viewer?sid=box-l-ynvbblq5wtn3l5nx64zrgryqbm-1001&uniqid=8aa211bc-bcf2-4659-afb1-2f537826c9b6&viewtype=detail

2015.06.03 追記 プログラムサイズを低減した版に更新しました。

2015.09.02 追記
ツイッター上で以下の投稿がありました。
akirahitoshi RT @nainara_tsukuru: LPC1114でソフトUSB、作ってみたんだけど認識されないのはなぜだろう。
8/29/15 7:05 AM

<注意>
回路がUSBデバイスと認識されないときは、LPC1114のIRCのクロック周波数を補正する必要があります。
(LPC810でも同様)
ソースを以下のように変更し、IRC_ADJUSTの値を変更してください。
詳しくは"続LPC1114 USBブートローダー"のページをご覧ください。


<修正前>
.equ    SYSMEMREMAP        ,0x40048000    @ System memory remap register

<修正後>
.equ    SYSMEMREMAP        ,0x40048000    @ System memory remap register
.equ    IRCCTRL            ,0x40048028    @ Internal resonant crystal control register
.equ    IRC_ADJUST        ,0        @ IRCの補正値

<修正前>
    lsls    r1,r0,#13                @@ r1(r6) = SYSAHBCLKCTRL 0x40048080
    adds    r1,r1,#0x48
    lsls    r1,r1,#12
    adds    r1,r1,#0x80
    movs    r6,r1

<修正後>
    lsls    r1,r0,#13                @@ r1 = SYSMEMREMAP 0x40048000
    adds    r1,r1,#0x48
    lsls    r1,r1,#12

    ldr    r2,[r1,#(IRCCTRL-SYSMEMREMAP)]        @@
    subs    r2,r2,#IRC_ADJUST
    str    r2,[r1,#(IRCCTRL-SYSMEMREMAP)]

    adds    r1,r1,#0x80                @@ r1(r6) = SYSAHBCLKCTRL 0x40048080
    movs    r6,r1

追記 ここまで

<移植上の留意点とプログラム改善のヒント>
 (1)LPC810とLPC1114ではフラッシュへアクセス速度が異なり、LPC1114のほうが遅いのでNOPの量を減らして調整する必要がある。
 (2)LPC1114にはNOT0、SET0、CLR0レジスタが存在しないのでLPC810と比べてコード効率が落ちる。
 (3)その代わりLPC1114のGPIOはBitごとの入出力マスクと一体化しているので、これを活用してコードの短縮を図る。
 (4)デバイスからホストに向けてデータを送出するルーチンは、従来のコードだと処理が追いつかないため、ループが使用出来ずに無駄に長いコードになっています。SysTickタイマーを作動させ多重割り込みさせればループ処理出来ます。

2015.06.03 追記
img_20150603-115142.jpg


<回路図>
USBで使用するピンを左側(PIN15未満)、シリアルで使用するピンを右側(PIN15以降)にまとめました。
GPIO1のみ使用しています。
GPIO0は使用していませんがGPIO0_0にアサインされるReset端子は無効化していますのでプルアップの抵抗は不要です。
img_20150602-182305.png


<ピンアサイン>
9. D+  (GPIO1_0)
10.D-  (GPIO1_1)
15.RXD (GPIO1_6)
16.TXD (GPIO1_7)
17.DTR (GPIO1_8)
18.RTS (GPIO1_9)


<ホストから転送するコマンド>
LPC810でのコマンドとほぼ同一ですが、ボーレートを更新する数値がLPC810と異なりますので
LPC1114専用のループバックホストを作成しました。
img_20150602-182415.jpg

デフォルトでは115200ボーでRTSとDTRはHighレベルになっている。


<ループバックテスト>
LPC1114FN28/102はLPC810の時と異なりTXとRXを直結してループバックテストを行うことができます。



ダウンロードはこちらから


https://box.yahoo.co.jp/guest/viewer?sid=box-l-ynvbblq5wtn3l5nx64zrgryqbm-1001&uniqid=9c10414c-070f-48bf-8553-a863929538f2&viewtype=detail

https://drive.google.com/file/d/1s9I56uvTLz4ekDFOFU4zKNfT7xt3pEi6/view?usp=sharing