2024年8月7日水曜日

spartan3をCPUから「slave serial mode」でconfigする(8)設計資料

本日は最終回です.XILINX FPGA slave serial configの設計資料をupします.

なお、全て免責としまーす!

ハンダづけ
ハンダづけが下手なので、0.5mm pitchだとフラックスを大量に使用してハンダづけします.ベタベタのフラックスを除去するのにアルコールで超音波洗浄です.

基板の全体
2枚の基板から成ります.
左のはFPGA config機能です.
右のはFPGA XC3S50が載っています.SPARTAN3の小さいものです.

左の基板  回路図pdf  gerber(zip)
USB COM機能のためFT232を使います.
CPUはSTM32C011F4P6です.FLASH 16kB、RAM 6kB
FPGA config dataを格納するのはserial FLASH W25Q32です.32Mbit

右の基板  回路図pdf  gerber(zip)
XC3S50の他に、裏面に3.3V/2.5V/1.2Vのreguratorがあります.

左右の接続
FPGAのconfig信号をコネクタに引き出しています.
ただし、この3つはコネクタに結線せず、固定したりNCしたりで済ませました.
 M[2:0]=111
 HSWAP=0
 DOUT 不使用
左基板には5Vの配線が無いのでjumper改修で追加しています.この5VはUSB bus powerを、FPGAの電源として供給するものです.

やってることはこんなです.
 ・PCとUSB COMで接続する(9600bps)
 ・PC上のxxx.binファイルを受信したらserial FLASHに書く=config data
 ・serial FLASH上のconfig dataをFPGAへ流し込む
 ・PCからコマンドを受けて処理する

XILINX ISE でxxx.binを作る方法はこちらに書きました.

基本の使い方
1)USBでPCと接続する
2)PCのterminal softを起動、COM PORTにシリアル接続する 9600bps
3)xxx.binをserial FLASH W25Q32に焼くには、「f リターンキー」を押す
4)terminalに表示が出る.
   flash write mode. waiting for transferring bin in 20Sec
5)20秒以内にxxx.binをterminal softからバイナリ送信する
6)しばらく待つと書き込み終了する (FLASH先頭から書く)
7)FPGA configするには「w リターンキー」を押す
8)5秒ぐらいでconfig完了する

その他のコマンド
「e リターンキー」    FLASH全域erase
「r リターンキー」    FLASHダンプ (アドレスtopとアクセス長はaとlで設定した値)
「d リターンキー」    binaryダンプ/characterダンプの切り替え
「a 数値 リターンキー」 FLASHアクセスアドレスtop
「l 数値 リターンキー」 FLASHアクセス長BYTE
「q リターンキー」    アドレスとアクセス長を表示する
「s リターンキー」    FLASH上の非ゼロデータ末尾を検索する

source code
PCcommand.c
コマンド処理いろいろ.
USB COM→UART受信はHAL_UART_RxCpltCallback()というcall backで1byteずつ受信してbufferに積みます.
FLASH焼きの際は、PCからのデータが256byte貯まったらFLASHの先頭から焼きます.なお、bufferを2本用意して書く読むを切り替えて、書く読むが衝突しないようにしていますので、programの可読性が悪いです.

FPGAWrite.c
FLASH上のxxx.binをFPGAへ転送する関数いろいろ.
PROGB,INITB,DONEの制御はSPARTAN3のdatasheetを読むと書いてあります.
FLASHから256byteをreadして、FPGAへシリアル転送するのloop.
シリアル転送をFLASHの先頭から始めます.
ならばシリアル転送終了アドレスはどうするかというと、searchBin.cであらかじめ非ゼロデータのボトムアドレスを探索しておいて、そこで打ち切ります.

searchBin.c
FLASH上の非ゼロデータのボトムアドレスを探します.

portRW.c
IO portの読み書きをする下位関数いろいろ.

W25Q32FV.c
FLASHを制御する関数いろいろ.

UART.c
UART→USB COMへ送信する関数いろいろ.
内部状態の表示に使います.

TIMINT.c
TIMER割り込みからcallされる関数いろいろ.
hardwareでこうゆう割り込みをセットしています.
 TIM14 10mSec割り込み
 TIM16 100mSec割り込み
 TIM17 1000mSec割り込み
1000mSec割り込みで、fコマンドのファイル転送待ち時間を管理しています.

3Dプリンタで作る台座
3DCADファイル   (DesignSparkMechanical)

あらすじだけですみません、以上とします.good luck!


かしこ

7 件のコメント:

  1. 読者 超音波洗浄機といえば 蒲田駅と京急蒲田駅の途中の商店街の角の眼鏡屋でおじさんが洗ってティッシュでめがね拭いていた

    返信削除
    返信
    1. 眼鏡屋の店頭の超音波洗浄機、ご自由にお使いくださいなのでしょうけど、あの濁った水がキモくて使う気にならんのでした
      洗剤投入するとあんな風に濁るんでしょうけど、嫌だぁー

      削除
    2. 読者 モスバーガーの先の眼鏡屋はどろどろしてなかったな
      水でしたね そこのどろどろの眼鏡屋は ご来店が多いのでしょうね

      削除
    3. 読者 あ 男性創作で そんなものがあると とりあえず買えのマニアがいるのはまちがいない バイト代全つっこみの学生さん 若さゆえのあやまち よのう うらやましい 若さ まだまだ若いよのう 選球眼が鍛えらっれると うかつに買うができないのも悲しき さだめじゃ

      削除
    4. 聖水の主の写真付きです

      削除
    5. 読者 にわか 「うしし 写真つき を手に入れました」
      海千山千の戦士 「きみ それ なかなか いい加工の写真だな」
      にわか 「え ?」
      にわか「あ ねえちゃん そっくりだ」
      海千山千の戦士「ねえちゃん の〇〇〇 を売ってくれ めしおごるぞ これからうまいものたべにいこう」

      削除