{{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>>