PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.13

前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆PIC18F14K50

PIC18F2550では大きすぎて、計画中のTK80互換マイコンボードND80ZVには組み込めそうにないことがわかりました。
USB機能内蔵のPICにはPIC18F4550、PIC18F2550のほかに20pinのPIC18F14K50があることはちょっと前から知っていました。しかしUSBに関する部分がPIC18F2550とはかなり異なっているようです。
案の定しっかり泥沼にはまってしまいました。

[第88回]

●PIC18F14K50用HIDブートローダの解析

前回ご紹介いたしましたPIC18 Disassemblerを使って、PIC18F14K50用HIDブートローダのHEXプログラムを逆アセンブルしましたところ、しっかり逆アセンブルできてしまいました。
しかしまだ 5 days trial版でそれを実行してみただけでしたので、逆アセンブルしてできたリストをsaveしたりprintoutしたりすることはできません。
30行くらい表示されている表示窓を上下にスクロールして全体を順に見ていくことはできます。

trial版ではなくて、full versionを購入すれば、作成されたリストをファイルにsaveしたあと、それをプリントアウトしたり、MPLABで再編集して、PICに書き込むこともできます。
しかし、この時点では、まだ購入するところまでは考えていません。
今回はどうしようもなくなってしまいましたので、逆アセンブルという窮余の策に出たわけですけれど、そんなことでもなければ、逆アセンブラを使うことなどまず滅多にありません。

で、とりあえずは、このトライアル版でなんとかしてみよう、というわけです。
画面をスクロールすればプログラムの全体を見ることもできるのですけれど、私は旧人類ですので、紙にプリントアウトされたものか、紙に書いたものの上でしか思考することができません。

あ。この記事のように、自分の頭の中にあるものを文章にしながらキーボードをたたいて、パソコンに入力していく、ということは、もちろんできます。
そちらの方はかなり慣れてきましたので、一度紙に書いてから、それをあらためてキーボードから入力する、などという面倒なことはしなくても済んでいます。

しかし、こみ入った、アセンブラのプログラムなどですと、やっぱりまずてきとうな紙に鉛筆でプログラムを書いてから、それをあらためてキーボードから入力してデバッグする、などということをよくやります。
そういう習性ですので、画面上でリストをながめているだけでは、思考できません。

どうしましょう?

そりゃあやっぱりはじめにプリントアウトありき、でしょうねえ。
思考しやすい方向にもっていくためには、努力や手間を惜しんではいけません。
結局、リストをスクロールさせながら、画面コピーして、それをプリントアウトいたしました。
けっこう長いリストでしたので、一画面ずつコピーしながらプリントアウトしましたら、トータル30枚にもなってしまいました。

ちょっと手間でしたけれど、真相を究明するためには、このくらいの手間を惜しんではいけませぬ。
昔の人は先生や先輩を拝み倒して貸していただいた本を徹夜でまるごと書き写したりして勉強したものなのだそうでありますね(江戸時代のお話ですけれど)。
そんなことに比べれば、パソコンを使って画面コピーして、それをプリントアウトするなど、いともたやすいことではありませぬか。

で。そのようにしてプリントアウトしましたリストの解析に取り組みました。
こんな感じです。

自分が書くプログラムではフローチャートなど書きませんが、人様の書いたプログラムを解析する場合には、さすがにフローを書かなくては理解するのが困難です。


30枚全部を解析したわけではありません。
いくらなんでもそれはとても大変な作業です。
今回の目的からすると、そこまでする必要はありません。
とにかくUSBコネクタを接続したことが検出できればよいのですから、そもそものスタートから、ほんの少しのところさえわかればよいはずです。

まあ、だいたいそのあたりのところについては、分析できたつもりなのですけれど…。
当然、私の考えたアプローチとは違っていますけれど、それはそれとしまして、まあまあ納得できるプログラムです。
どこかに秘密の命令が埋め込んである、などということでもないようです。

このPIC18F14K50用HIDブートローダも、USBケーブルが接続されると、出力ポートに接続されたLEDが点滅するようになっています。
解析したあたりのプログラム部分をつなぎ合わせて、これで多分動くだろう、という始まりの部分だけを実際にPIC18F14K50に書いて、本当に動くかどうか確認してみることにしました。

そうしますと、やっぱり、このリストのここからここまでを切り取ってこちらのここに貼りつけて、なんてことをしたくなってきます。
そこで。
出力リストがsaveできる、PIC18 DisassemblerのFull versionがぜひ欲しい、ということになります。
で。購入することにしたのですけれど、前回書きましたように、届きません。

いずれ届くかもしれませんが、それを待っていたのでは、先に進めません。
うう。
仕方がありませんから、ずるいことは考えないことにいたしまして、リストを見ながら、こつこつと手作業で、必要な部分のプログラムをキーボードから入力いたしました。

ええ。
PIC18 DisassemblerのFull versionがメール添付で届きましたのは、必要なプログラムを全部キーボードから入力してしまったあとでした。
まあ、世の中というものは、大抵はそうしたものなのです。

それはそれ。
とにかく、そのようにして、キーボードから入力して作り上げたプログラムをMPLABでアセンブルしてHEXファイルを作り、そしてそれをPICプログラマでPIC18F14K50に書き込みました。

さて、結果はいかに?
さっそくPower OnしてUSBケーブルを接続してみましたところ、ちゃんとLEDは点滅を開始しました。
めでたしめでたし。

ではありません!

それはよそのお方がお作りになったプログラムをちょいと拝借して、動かしてみたに過ぎません。
それが動作することはわかるのですけれど、
ではなぜ、私の書いたプログラムでは動いてくれないのか?
そこのところは、依然として謎のまま、なのですよお。
CPUをつくろう!第517回(2010.6.6upload)を再編集

PICでUSBを![第88回]
2011.7.13upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る