• 締切済み

USB経由でPIC自体をプログラミングできますか?

PIC18のUSB通信機能を使って内部フラッシュメモリにデータ(プログラム)を書き込めますか? 要は、PIC18のUSBインターフェイスを使ってPIC自体をプログラミングしたいのですが、可能でしょうか? イメージ的には次のような仕組みです。 1)PICをUSBでPCにつなぐ。 2)PCからPICへプログラムまたはマクロ命令データを送信する。 3)PICはどこかにそのプログラムまたはデータを保存する。 4)PICをUSBから切り離す。 5)こちらの思い通りにPICが動く。 USB通信を行う場合、本来フラッシュメモリにはUSB通信関係のプログラムを書き込んでおくと思うのですが、 USB通信で受信したデータをフラッシュメモリの別領域に書き込んだりすることができるのでしょうか? あるいは、USB経由で受信したデータを汎用レジスタにいったん書き込んでおいて、 書き込みが終わってから、汎用「レジスタのデータを 読み取りつつ、PIC事態を制御することは可能でしょうか?

みんなの回答

  • pc_net_sp
  • ベストアンサー率46% (468/1003)
回答No.2

基本的には可能です。 ただ、その前にブートローダーをPICに書き込んでおく必要があります。 USB版のブートローダーはフリーではなかなか見つかりません。 RS232C用のブートローダーなら、根気よく探せば見つかります。 シェアウェアでしたら、 http://park11.wakwak.com/~microtechnica/cgi-bin/goodslist.cgi?mode=view_detail&this_num_genre=1&this_num_goods=&genre_id=00000013&goods_id=00000001&sort= C言語やBasicコンパイラも取り扱っています。

参考URL:
http://www.microtechnica.net/
noname#252164
noname#252164
回答No.1

出来なくもない。 それにはPIC自体にブートローダみたいなものを仕込んでやる必要があります。 たしか何年か前にトランジスタ技術におまけでついてきたDSPICはそういう仕組みになってましたよ。 (USBは実装されてなかったけどね)

関連するQ&A

  • PICのUSBホストコントローラーについて

    初心者です。 PIC24FJ64GB002のUSBホストコントローラーを使用し、USB機器との通信を行っています。 USB機器との通信制御を行っていない時に、PICの汎用ポートからシリアル通信の信号(パルス幅=10μsec、50ビット)を出力しているのですが、不特定ヶ所でパルス幅が50μsec程延びます。 USB機器との通信制御を行っていない時に、通信端子に『通信時間=50μsec、1msec間隔 』の信号が出力されています。 ●この通信制御が汎用ポートの処理の邪魔をしている(割込みが入っている)のでしょうか? ●割込みが原因の場合、割込みを避けて汎用ポートの出力を行いたいのですが、どのようにすればよろしいでしょうか? ご教示下さい。 よろしくお願い致します。

  • PIC18F2550のUSBでのインタラプト通信について

    "PICで楽しむUSB機器"(後閑哲也 著)を参照しながら工作しているのですが、USB通信におけるインタラプト方式でのPICからPCへのデータの転送方法で、PICの設定とそのプログラムがよくわからずに困っています。 何か良い参考資料等がございましたら教えていただけないでしょうか。

  • PIC USART 全二重通信

    2つのPIC(A, B)間でUSART機能を使用し、全二重通信を行いたいと考えています。 PIC(A)で送信を開始し、同じタイミングでPIC(B)からのデータを受信したい場合、 PIC(B)は送信レジスタにデータを入れておくだけで自動的に送信されるされるのでしょうか?それとも、受信を開始した直後くらいに何か送信設定を行う必要があるのでしょうか?

  • PICのシリアル通信のWIN_APIプログラムについて

    PICとPCとのシリアル通信の WIN_APIプログラムについてどなたかご存知の方は教えてください. 現状,API関数を用いて,シリアル通信をできるようにプログラムを作成したのですが,送信はできるのですが,受信データが"C0"をPICから送付しているのに,"FFFFFFFC0"と受信されてしまいます. 先の"FFFFFFF"をとるにはどうしたらいいでしょうか? 現状:受信プログラム // シリアルポートに対する書き込み(PICに送信命令) WriteFile(hCom, w_com_Buf,lstrlen(w_com_Buf), &n, 0 ); // シリアルポートに対する読み込み ReadFile(hCom, s_com_Buf,1, &n, 0 ); mikroC上のUSARTターミナルでは送受信は適正で, 上記のプログラマで 送信はPIC側で受信していることは7SEGを使って確認しています. しかし,PC側では, s_com_Buf[0]には,"C0"が入ったり,"FFFFFFC0"が入ったりします. PICは現状,多チャンネルAD変換をしているため, 送信に対する受信データのやり取りができなくて困っています. どなたか先生教えてください.

  • PICでUSB通信について?

    PCとPICマイコンとのUSB通信をしたいと思っています。 ネットで調べたら、MCHPFSUSB Framework v2.6をMicrochip社よりダウンロード したら、PIC18F系で簡単にUSB通信できるとありましたが、 MCHPFSUSB Framework v2.6が見つかりません。見つける方法を教えて下さい。 また、削除されている場合はその代替方法等を教えて頂きたく、お願いします。

  • PIC18F2550でのUSARTの使い方について

    フリーのC18コンパイラで電子工作をしています。 今回18F2550でシリアル通信に挑戦していますが、自分の目的の動作のためのレジスタ設定が理解できません。教えて下さい。 動作内容はPICからシリアル通信でデータを送り12ビットシリアル-パラレル変換の「NJU3714」でシリパラ変換させることです。PICのデータ受信は今のところしないつもりです。

  • PIC-PCシリアル通信プログラム

    PICとPCでRS232のシリアル通信を行おうとしているんですけれど、 PICからPCに文字列を送ろうと たとえば PIC側からプログラムで puts("A\0");とデータを送信して ReadFile()関数でPC側で受信しているんですけれど、 受信したデータを画面表示されると Aフフフフフフフフフフフフフフフフフフフフフフフフと表示されてしまいます。 ちなみに送信データをNULLだけにしても フフフフフフフフフフフフフフフフフフフフフフフフフを表示されます。 これを解決する方法がわかりません。 どなたか教えてください。

  • PIC16F1823 SPI通信

    PIC16F1823をマスターとして、スレーブデバイスから、SPI通信にてデータを読み込もうとしています。オシロスコープで波形を見ると、期待したデータをスレーブ側は出力しています。しかし、PICでは、0x00のデータしか受信されません。 PIC側のマスター受信では、SSP1BUFをダミーで読み込み、SPIでコマンドを送信、SSP1BUF.BFをみて、さらにSSP1BUFをダミーで読み込み、次にデータ受信用にダミーデータと受信を行い、SSP1BUF.BFをみて、SSP1BUFを読んでいます。気を付けて確認しなけらばならないレジスタ等あったら教えてください。

  • PICのUSARTについて

    PICのUSARTについて PICのUSART機能を使おうかと思い色々読んでいてPICのUSART(非同期の場合)は (1)基本的に1対1でしか接続できない。 (2)(非同期では)互いは平等でマスター、スレーブ関係はない (3)それぞれ送信側を制御し意図的に受信をする事はできない。 (その場合は相手に取り決めたコードを送ってデータを要求する) という感じでよろしいのでしょうか。 またPICの通信機能としてはSSPのSPIに近いような感じはしますがどちらが簡単でしょうか?

  • PICのプログラムについて。

    あらかじめプログラムされている PICのデータをPC側に取り込む事は可能なのでしょうか? 又、逆にプログラムしたPICのデータを第三者が コピーできないように設定したりできるのでしょうか?

専門家に質問してみよう