{{category 電子工作}}
!!!XMOS の XS1-G4 であそぶ - その2
!!テスト基板 XC-1,XC-2,XK-1 で遊んで気がついたことのメモを書いていきます。
!!!OTP ROM の読み方?
XC-2 はイーサネット I/F のついた評価基板です。
ということは、当然 MAC アドレスがどこかに書かれている(か、ユニークになるように生成している)はず。
webserver デモプログラムを散歩していると、
webserver/httpd/getserial.xc に、妙なポートの割り当てが。
#define OTP_DATA_PORT XS1_PORT_32B
#define OTP_ADDR_PORT XS1_PORT_16C
#define OTP_CTRL_PORT XS1_PORT_16D
#define OTPADDRESS 0x7FF
#define OTPREAD 1
#define OTP_tACC_TICKS 4 // 40nS
on stdcore[3]: port otp_data3 = OTP_DATA_PORT;
on stdcore[3]: out port otp_addr3 = OTP_ADDR_PORT;
on stdcore[3]: port otp_ctrl3 = OTP_CTRL_PORT;
という記述が。
このポート記述の下に、int otpRead(unsigned address) という「そのままやんけ」という関数がありました。
これを参考にすればよさそうです.....
ちなみに、「プログラム中で OTP を読んでるのでは?」と思ったきっかけの MAC アドレス生成(読み取り)は上記で引用した箇所 ではなくて、webserver/mac/server/getmac.xc にそれらしい記述があります。
!!!配列アクセスの高速化
XMOS 製のソースを見ていると、
#pragma unsafe arrays
というような記述がところどころにあります。
xlinkers で unsafe arrays で検索してみると、
「Theoretical Execution Speed of XC」というトピックに速度に関する話題がいろいろ載っています。
上記の pragma を配列を使うループの前に記述しておくと、配列の範囲チェックをしなくなる(危険)な分早くなるようです。
!!! XN ファイルについて(1) (9.9.0)
最近の環境(9.9.0)では、プラットフォーム定義ファイル (.xn 拡張子)が必要なようです。
過去のプロジェクトを最近の環境で動かすには、C:\Program Files\Xmos\DesktopTools\9.9.0\configs から、該当する環境の .xn を持ってきて上書きする必要があります。
また、xflash も .xn が正しくないと動作しないようです。
過去に SPI ROM を無理やりひっつけた XC-1 に、新しい xflash で過去のバイナリを書こうとすると、怒られます。
EPCS1 をくっつけて改造した XC-1 用の .xn は下記のようになるみたいです。
Board
core stdcore[4]
※私はコレでもかけなかった(xflash がエラーになった)のですが、一旦 B ボタンを押しながら JTAG(OTP) ブートで書き込みモードにしてから、この .XN を付加した SPI ROM に書くと、それ以降は SPI ブートモードで問題なく書けるようになりました。
EPCS1 以外の FLASH をくっつけた場合は、該当箇所を変更してください。
!!! XN ファイルについて(2) (9.9.0)
.XN ファイルで、リンクの定義をしておくと、2つ以上の XMOS chip の通信をする場合や、同時書き込みにも対応してくれるようです。
たとえば、下記の .xn を記述することで、XK-1 を2つ連結した場合でも、あたかもそれが1チップのマルチコア CPU であるが如くに、
1つの .xc プロジェクトと、1つの XTAG アダプタで、両方のボードのデバッグができ(これは JTAG がチェーンになっているからですが)、さらに、それぞれの基板の flash にブートコード書き込みが出来るようになります。
[出典](XMOS linkers):http://www.xmoslinkers.org/forum/viewtopic.php?f=6&t=576
Board
core stdcore[2]
----
<<XMOS の XS1-G4 であそぶ | XMOS の XS1-G4,L1 であそぶ - その3>>