MAX10-FB基板に秋月電子購入のSDRAM(EDS1216AGTA-75-E)を接続

CQ出版のFPGA電子工作スーパーキット付属のMAX10基板にはSDRAMを搭載できるスペースがありますが、SDRAM自体は別に買わなければなりません。

書籍で推奨されているのはAlliancememoryのAS4C32M16SAまたは
AS4C16M16SAですが、秋月電子でも買えるELPIDA(現Micron)のEDS1216AGTAを搭載してみました。

なお AS4C32M16SAは64Mバイト、AS4C16M16SAは32Mバイトで、これに比べると今回取付けるEDS1216AGTAは16Mバイトと少な目ですが、これだけあれば大抵の事には困らないと思います。

取付けるにあたってまずAS4C16M16SAとEDS1216AGTAのデータシートを見比べるとEDS1216AGTA の方がアドレスピンが一本少ない(NCになっている)事以外はピン配置は同じです。なのでそのままハンダ付けしました。

動作確認のため、書籍「FPGA電子工作スーパーキット」の15章に従いQuartusPrimeを立ち上げてQsysを開きます。

QsysのSDRAMコントローラの設定ではRowアドレス幅を12本、Columnアドレス幅を9本にするのが書籍の説明と異なるところです。

Bits,Chipselect,Banksは表示が見えていませんが、それぞれ16,1,4です。

以上のままでも動作したのですが、一応データーシートとにらめっこして最適と思うタイミングにしたのが下の設定。

たぶんこれで良いと思いますが・・・変なところがあればご指摘ください

あとは書籍の通りでコンフィグは完了し、NiosⅡ上でSDRAMのチェックプログラムを実行するためmain.cの先頭部分にあるSDRAMサイズ設定を次の様に変更しました。

#define SDRAM_SIZE (16 * 1024 * 1024) // 128Mbit

以上でメモリーチェックも問題なくパスしています。

ArduinoでPICマイコンに書込む~AE-PIC18F14K50編~

先日HOI-Linkを製作した時、秋月電子のPIC18F14K50基板「AE-PIC18F14K50」Arduiono UNOを使ってブートローダーを書き込みました。その際以前書いた「ArduinoでPICマイコンに書込む~OpenStickLite(PIC18F14K50)編~」とは若干変更する必要がありました。
またブートローダーだけでなくHOI-Linkのファーム全体を書いてみました。
なおArduinoに入れる書込み用スケッチにミスっていた箇所があったので修正版を掲載しています。

AE-PIC18F14K50基板は秋月電子で¥800 (現時点) で売られています。DIPパッケージ単体では¥220ですが発振子やUSBコネクタも買う事を考えると基板もそんなに割高ではありません。
以前DIP版のPIC18F14K50にArduinoからブートローダーを書き込んだのと同様にこの基板にも書込んでみました。

前回DIPパッケージ版と今回のAE-PIC18F14K50とで異なるところ

前回の回路図はこれ。この時マイコンのVDDにはArduinoから3.3Vを供給し、VUSB端子もVDDに直結していました。

PIC14K50WriteByUNOsch
ArduinoUNOでPIC18F14K50に書き込んでみた回路図。

一方AE_PIC18F14K50基板はVUSB端子が外部に出ていません。VUSBはチップ内にレギュレータを持っていて3.3Vが出力されるのでVDDに少し高い電圧(まあ5Vですよね)を入れてやればVUSBには外から印加する必要はありません。PICkit3でもそうなっていますしね。

という事で次の様な回路で上手くいきました。
上と違うのは電源を5Vに変えたのとVUSBには接続していない事。
なおVUSB端子はGNDとの間にコンデンサを接続する必要がありますがAE-PIC18F14K50は基板内に0.22μFを内蔵しています。

AE-PIC18F14K50基板に書き込む配線

ブートローダーだけでなくファームウェア本体も書いてみる。

といつもはブートローダーだけを書き込み、そのブートローダーから本体のファームウェアを書き込んでいました。今回ちょっと試しにブートローダー+HOI-Linkのファーム全体を書き込んでみます。

まずその前に書き込みデータを作ります。PICkit3を接続してファーム書込み済のマイコンからプログラムを読み出し、HEXファイルに書きだしました。このファイルにはフラッシュに書かれたプログラムとコンフィグデータ以外にEEPROMの内容も含んでいます。しかしArduino上の書込みスケッチをEEPROMには対応させていないのでテキストエディタでEEPROMに関する行を消しておきます。

そして出来たのがこのファイル→HOI-LinkAndBootloader.zip
解凍すると次のHEXファイルが出てきます。
HOI-LinkAndBootloader.hex
これをメモ帳で開いてTeratermにコピペする事でAE-PIC18F14K50に書き込みます。このあたりの手順は前回の記事に書いています。

そしてファーム全体を書き込むと1分程度で何事もなく終わりました。
因みにブートローダーだけだと約10秒です。Teratermの設定で速度を下げているので専用PICライタに比べると時間が掛かりますが、これは 書き込みデータ全てを Arduinoのメモリーに保存できないのでシリアル通信でPCから順次送りながら書き込んでいる為です。この時PCとArduinoの間でフロー制御できればよいのですが、Arduinoの素の状態ではこれが出来ないので送り込み速度の方を落としているのです。

続いてベリファイをしてみると・・・なんだかエラーが出ます。調べてみるとArduino上の書込みスケッチのベリファイルーチンでチェックサムの計算をミスっていたので、これを修正するとベリファイもエラー無く終了しました。
なお書込みルーチンでもチェックサムを計算していますがこちらは正常です。
書き込みとベリファイは殆ど同じ処理なので上手くサブルーチンで共有すればいいのに面倒になってコピペで作成した為、デバッグの時にベリファイ側の修正を忘れていた様です。

修正版のArduino UNO用書込みスケッチ→PICWrite18F14K50_190621.zip

という事で・・・

秋月電子のAE-PIC18F14K50基板に専用PICライタを使わずファームを書き込めるようになりました(Arduinoは必要ですけど)。 直接ファームを書いても良し、ブートローダーを書いてUSB経由でファームを送り込むのも良しでお手軽にUSB工作が楽しめます。