2012年9月9日日曜日

ST-Link w/ Mac OS X

http://cu.rious.org/make/getting-stlink-to-work-on-mac-os-x-with-macports/
に解説がある.ただし pkgconfig, automake, autoconf も port でインストールする必要あり.
sglib というのを使わないよう,長くなっているが make にオプションをつけるのを忘れない.
LIBRARY_PATH=/opt/local/lib C_INCLUDE_PATH=/opt/local/include make CONFIG_USE_LIBSG=0

2012年9月5日水曜日

FXMA108はプルアップ/ダウン不可で I2C には使えない

おかしいなと思ったら,データシート p. 5 に

Pull-up/Pull-down Resistors
Do not use pull-up or pull-down resistors.

とある.やられた.ホールド回路があるのでつけてはいかんと.オープンドレインとしては機能しないということだ. はっきり商品紹介ページにそう書いてくれればいいのに. これは SPI/UART レベル変換用だ.ダメらしい,とかいう記述があるページも見つかった.いや,ホールドされるならはっきりダメである. 似たような FXMA2102 モジュールは I2C 用,プルアップ抵抗は自由につけられます,とある.ピン数が少ないとかいう問題ではなく別用途だ. 普通に 2SK1772 か PCA9306 つかえばよかった.

2012年9月3日月曜日

dfu-util で STBee mini (STM32 CM3) に .hex を書き込む

.sym ファイルの XXXXXXXX R g_pfnVectors と書かれた行のアドレス XXXXXXXX か .lss ファイルの 0 .isr_vector 000001e4 XXXXXXXX ... のアドレスをしらべ,dfu-util --dfu-address の引数に 0x をつけて .bin ファイルを書き込む. .bin ファイルがなければ xxx-objcopy -O binary -I ihex 等で作れる.

2012年8月30日木曜日

ミニ液晶ディスプレイ

ストロベリーリナックスのミニI2C液晶モジュール(8x2行)は,ピンピッチが 1.5 mm つまり 1.27mm は狭すぎ 2.54mm は広すぎ,というユニバーサル基板にない?間隔で容量やや大きめ 1μF のコンデンサを3個つける必要があり,固定用のLEDピンは幅広なので 3mm ほどの穴を開けねばならず,少々面倒だが,ソフトウェアは同社の 16x2 行 I2C ディスプレイと同じ(ST7032i コントローラ)で動くリーズナブルなディスプレイ.
コントラストの値は少し小さめ(22 等)がよいようだ.
2 mm の基盤に足を広げてさして回路をつけたが,折れたりとれたりしないか不安になる.1x0円ぐらいでブレイクアウトボードがあればいいのに.ついでに I2C 3.3V/5V 変換チップの場所もついていればもっといいのに.

2012年8月26日日曜日

ATmega644/1284 Arduino variation "Quaranta"

リアルタイムクロック装備,イーサネット,DES (いまさら)対応 NFC RFID (Mifare/FeliCa 同時対応)リーダ認証機能およびログ機能つきのプロトタイプをつくっていたらArduino Duemillnove/UNO のプログラムメモリが足りなくなった.主に Ethernet のせい.とても FAT の読み書き用コード,DESの暗号化と復号化ルーチンのスペースはない.RAMもバッファでいっぱいいっぱいだろう.
それで Arduino Mega にうつそうかと思ったらボードが大きすぎるしSPIとI2Cのピン位置が違うのでISPコネクタでSPIを使うタイプのシールドしか使えない.当然「互換ボード」の類はバスのライブラリがないとかプログラミングをウェブのフォームでさせられるとか,Windows でやらんといかんとか,イーサネットの専用シールドがいるとかで,もっと無理.
フラッシュRAMとかI/Oの規模は 644 でいいのだが Sanguino はピン配置の互換性を無視しているし新 IDE の対応など更新もとまっているのでやっぱり使えない.それでむかし 644p を mega 用ユニバーサルシールドにくっつけた自家製ピン互換ボードを使用することにする.しかたがないので自家製 hardware variation ファイルを作った.
github.com/una1veritas/Arduino/tree/master/hardware
Ethernet もSD Card も WIZ812 モジュール,Adafruit モジュールで外付けすることにする.Arduino 標準ライブラリはいろんな人の作ったライブラリをまとめていて古い部分もあるので,CS でデバイス選択をするしくみなどで手直しが必要になる. RTC も SRAM もつないで,まったく SPI バス祭り.

2012年8月24日金曜日

Old Arduino Ethernet Shield あるいは W5100 のワナ

Arduino Ethernet Shield に使われている W5100 チップは TCP/IP を手軽にしてくれるありがたいチップだが,SPI slave としての挙動が普通ではない・・・Slave select されていない(/SCS が high)状態でも MISO 出力がアクティブ(非ハイインピーダンス状態),つまり他の slave の信号がよめなくなるらしい.
よく Ethernet Shield が SPI を使うので他の SPI デバイスは使えなくなります,という説明を見たが,そんなはずはないわけで.単なるチップのバグではないか.
Ethernet Shield も V5 などからはアプリケーションノート W5100_AN_SPI.pdf のおすすめに従い,/SCS から SEN に not ゲートをかましている.

ひどい.どおりでいろいろ動かないわけだ.

2012年7月29日日曜日

Mifare Classic と FeliCa FCF 同時対応

SONY FeliCa の秘密主義と SONY の NFC リーダの SDKをあんまり売る気のないのか?という代理店にちょっと途方にくれたが,研究家の方々がインターネット上に公表している成果(1, 2, 3 ほか)を参考にして,Adafruit 等から購入できる PN532 / I2C をつかったリーダで読み取りが可能になった.SONY の現行最新 NFC チップでもほぼ同じコマンドシーケンスなので USB タイプや RCS620S でも使えるだろう.

サービスコードの違うバージョン?やバイトオーダーが仕様書と違う記載があったりしたが,結局 PN532 のスルー通信コマンド InCommunicateThru で FeliCa カードの仕様書通りのコマンド送信とレスポンスを実装して,
(1) Polling をシステムコード ANY 0xFFFF ではなくEdy/FCF の 0x00FE でかける.Suica 系は ANY でも読めてしまう...Edy つき FCF カードは Edy が読めれば FCF も読めるということだろうか.
(2) そうすると Service Request で FCF のサービスコード 0x1a8b が確認できる.最初に見たページのいくつかでは Edy は 0x1317 ? だったが,手持ちのカードではサービスがなかった.別のページのソースコードにあった 0x170F でやっとサービスを確認できた...
(3) そして Read Without Encryption で 0 番から数ブロックを読めばいいのだった.FeliCa カードのコマンド仕様どおり2バイトのブロック番号指定で最初のバイトの msb はビットをたてるから 0x80, 0x00, 0x80, 0x01, ... となる.

これで,やっといまだに半角カナ文字が使われている世界にたどりついた.

しかし仕様を公開しない,SDKでお金をとる,というのでセキュリティがはたしてまもれるものなのか...世界中でつかわれ,かつ脆弱という主張がある Mifare Classic でも,いまだ電子チケットシステムがやられたという話はきかないけれども.
次期チップは NXP と SONY で共同開発するという話もあるようなので期待したいですね.