2012年08月14日

USB HUB IC

ちょっと USB HUB IC について気になったのでメモ。

以前目をつけた HUB に、

Quadrate USB 2.0 4-Port Hub with USB Cable (Color Assorted) $4.14
Quadrate USB 2.0 4-Port Hub with USB Cable (Translucent Orange) $4.20

というのがある。どこに目を付けたかというと...

  • 透明なので、外観でどういう構造なのか分かる。改造しやすそうな感じ。片側 2 port のコネクタを取って 外部 2 port + 内部向けみたいなことも出来そう。

  • IC が SSOP28 で、電子工作として扱いやすそう。-- IC が単体で手に入らなくとも HUB から外してしまえば良い。再設計した基板に載せかえれば、自由な形態にできる。

まぁこういうことなのだ。これを、入手したので、ID を見てみた。

さて、しばらくぶりに FE1.1s を ググってみれば、この IC に目を付けたひとがいた。

仕切りなおしのA8
Hubあぶり焼き
空きパターンのアレ


回路図も作ってくれているので、見たところ ... すごくシンプル。SSOP28 だし、なにか、電子工作ネタに良さそうな感じ。


    3.3V と 1.8V のレギュレータがオンチップになっている。 どれだけ電流を流せるのか分からないが、場合によっては、このためだけに使うのもアリか?

記事中にあるが、このひとが入手したのは、上海問屋の これ。今でも 299 円で入手できる安物 HUB 。ケーブルが断線したりして、壊れやすそうだが、壊れても捨ててはいけない。バラして電子工作ネタにするのだ。

基板が小さいので、そのままでも なにかに組み込んだりできそうだし、基板を起こして PIC32MX ボードのマザーボードみたいにするのも楽しいような気がしている。
posted by すz at 22:19| Comment(0) | TrackBack(0) | 日記

2012年05月26日

dealextremeの電子パーツ

dealextreme で扱っている 電子パーツが増えてきている。(コンパチ品ばかりだが) Arduino関係 まで扱うようになっている。

お買い得なものや 日本で手に入りにくいものもあるので、ピックアップしてみよう。

お買い得なもの

日本で手に入りにくいもの

これぐらいにしておこう。電子パーツと言いながら、コネクタとか スイッチばかりになってしまった。こういうのは、実際安いし種類も豊富にある。探してみると掘り出しものが見つかるかも知れない。

追記: ミニミニバナナ

EAGLEの45°回転

    ナビゲーションスイッチ MT-008A は、(反時計回りに)45 °回転して マウントする。このライブラリを作ろうとしていたのだが、どうやって 45 °回転した PAD を作ろうか悩んでいた。-- i アイコンでの 設定で、回転角があるのだが、ふと 45 と入れてみたら見事に回転した。(使っているのは、EAGLE-5.7)

    なんだ、EAGLE でも 45 °回転した部品は作れるのか ... と嬉々としてライブラリを作ってみた。座標を計算するのが面倒なのだが、なんとか 出来上がった。 出来上がってから、部品も回転できるのでは?... と思いついてやってみたら、できた。 45 °どころか任意の回転ができるようだ。

    90 °単位しかダメだとばかり思っていた。

    ところで、MT-008A は、ユニバーサル基板にマウント可能かも。作ったライブラリをじっくりみると ... 位置決め用の でっぱり? が、2.54mm ピッチ。三連の真ん中さえ絶縁して引き出せれば なんとかなりそうだ。
posted by すz at 12:29| Comment(0) | TrackBack(0) | 日記

2012年05月19日

昇圧 DC-DC コンバータ覚書

前の記事に関係あるが、ステッピングモータ SPG20-1362を使うなら、15V 近い電源が必要になる。これをどうしたら良いかちょっと考察。

MC34063A

    汎用の DC-DC コンバータだと MC34063A がある。これは、昇圧にも使うことが出来て 5V → 12V なんかでも使える。あまり凝らないのなら、これで作るのも良いだろう。

    以前に書いたのだが、この MC34063A の派生版のような IC で M5291FP というのがある。日本語の PDF もあって、細かい説明が書かれていて参考になる。ググるキーワードは、RJJ03D0805 。現在も ルネサスのサイト から ダウンロードできる。

    4.8V (NiMH x4) を入力として 13V 0.5A を作りたいとして、ちょっと検討してみよう。

    まず 部品として、
  • 表面実装用(SMD) インダクタ (27uH , 3.1A) 4個 100円 
  • 表面実装用ショットキーバリアダイオード SS2040FL (40V , 2A) 20個 300円
    を使うことにする。

      Ton/Toff = ( Vout + Vf - Vin ) / ( Vin - Vsat )
       Vf は、ダイオードの 順方向電圧
      Vsat は、トランジスタの飽和電圧

    こういう式がある。Vin から上げたい電圧:Vin が Ton:Toff になるということか。

    ダイオードの 順方向電圧 は電流を流せば増える。0.5 V と見積もっておく。Vsat は、M5291FP のデータシートでは、外付け Tr を使わないなら 0.6V だそうだ。あと電流検出抵抗 Rsc の分がある これは Vin から 0.3V 引いておくことにしよう。

      Ton/Toff = ( 13 + 0.6 - 4.5 ) / ( 4.5 - 0.5 )
      = 2.275

    結果はこうなった。Ton は結構長い。

      Ipk = 2 x Iout x (1 + Ton/Toff)

    次にこういう式がある。電流は 線形で増えていくから ピークは平均の 2 倍。で、平均電流と出力電流の関係は、Iout x (1 + Ton/Toff) 。Toff の時間に 線形に減っていく電流の面積。こういうこと?

      Ipk = 2 x 0.5 + (1 + 2.275)
      = 3.275 (A)

    13V で 0.5A 流したいなら Ipk は 3.275 になる。インダクタの定格をちょっとオーバするが気にしない。

      Lmin = (Vin - Vsat)/Ipk * Ton
      1/Ton = (Vin - Vsat)/Ipk / Lmin
      Ton = Lmin * Ipk / (Vin - Vsat)

    Ipk はこの式で使い、Ton(MAX) を出す。

      Ton = 27u * 3.275 / ( 4.5 - 0.6)
      = 22.7 (us)
      Toff = 22.7 /2.275
      = 10.0 (us)

    計算した Ton + Toff から周波数を計算すると 30.6 kHz になった。

    これで良いの? という気がするのだが ... 5V → 12V 1A の回路例で 10uH なのに 50kHZ に周波数を設定している。0.5A なら 20uH で50kHZ 前後のはずだから だいたい合っているような ...

    効率はどうなるのだろう?

      出力は、13V x 0.5A
      入力は、Vin (4.8V) x ( 0.5A + 1/2 Ipk x Ton/(Ton + Toff) )
      で計算してみた。0.5A 足しているのは、昇圧は Vin に 上乗せするような計算になっていたから。理由ははっきりわからないが、こうしとかないと辻褄が合わなさそう。

      計算すると 82% ... 理論値みたいなものだし、実際はそんなはずはないか ...

    ところで、Ipk と 定格の関係。ダイオードなんかは、定格は平均電流。ダイオードの定格は 2.0A だが、大丈夫なんだろう。インダクタは、10% インダクタンスが減るときの 電流値で、実はもうすこし流せるようだ。これも問題ない。問題は、MC34063A自体。1.5A と書いてはあるのだが、ピークなのか平均なのか?

    ピークなら Ipk = 3.275 (A) だから全然ダメ。だが平均は、

      1/2 Ipk x Ton/(Ton + Toff)
       = 1.14 (A)

    だからいけることになる。

    どっちだろうか? それはやってみれば分かる。ただ、やってみるには、Rsc として 0.1 Ωが必要。... これの入手に難がある。

  • コスモ電子: 酸化金属皮膜抵抗 1W

    とかあるところにはあるようだ。

  • MCR25JZHFLR100 0.1Ω 3225
  • MCR50JZHFLR100 0.1Ω 5125

    デジキーならこのあたり。

    MC34063A の互換品には、NJM2360ADがある。 あと、100均の シガープラグ の 5V アダプタでも使われているのは有名。

    発振周波数設定用のコンデンサの値

      Ct (pF) = 40 x Ton (us)

    だそうだ。1000p ぐらい。


Tiny13A

    上の計算で、周波数や Duty比は分かった。なら Tiny13A とかの PWM でも良さそうなものだ。ADC があるから 電圧を測定できる。出力電圧を上回ったら スイッチングをやめれば良い。

    追加部品は、Nch MOSFET。

  • シングルNchチップMOSFET FD6612A (30V , 8.4A) 10個 200円 売り切れ
  • シングルNchチップMOSFET FD5680 (60V , 8A) 5 個 200円
  • DMS3016SSS SO-8 シングル(デジキー)
  • DMG3420U SOT-23 (デジキー)
  • DMG3415U SOT-23 (デジキー)
  • IRLML6246 SOT-23 (デジキー)

    沢山書いたが、FD6612A,FD5680 は VGS が高く 4.8V をそのまま AVR の電源にしないといけないという制限になる。 DMS3016SSS はデジキーで買えるものだが、置き換えが可能。はなからデジキーから買うつもりなら SOT-23 の DMG3420U も良いかも。

    ... というわけで、Nch の MOSFET の選択もなかなか面倒。

Tiny85/Tiny45

    Tiny85/Tiny45 だと もっと高度なことが出来る。やってみたいのは、コンパレータを使った電流モード制御の追加。

    電流測定用 抵抗として 0.1Ωを用意して、Nch MOSFET と GNDの間に入れる。あと、比較用に 0.3V を 分圧して作る。分圧の元は VCC (4.8V) でも良い。

    制御は、3A 流れることがあれば、Ton を短くする。毎周期 3A 流れた時点で Off にするというのは 厳しいので、3A 以上流れないように Ton を調整するわけだ。

    ピンアサイン案:

    ~RESET 1 8 VCC
    ADC3 2 7 ADC1 (SCK) voltage
    L 電流検出 ADC2 3 6 PWM (MISO)
    GND 4 5 (0.3V)基準電圧 (MOSI)

    #5 は、AIN0 だが、AREF でもある。こちらに 基準となる電圧を入れたほうが融通が利きそうだ。AIN1 は、ADC0-3 と置き換えることができる。Tiny85/Tiny45 は、差動入力 ADC2-ADC3 が使えるので、応用の可能性を考慮して、電流検出は #3 ADC2 にする。
posted by すz at 02:31| Comment(0) | TrackBack(0) | 日記

倒立振子ロボットめも

メモたんく』の ぱんと氏 のところで倒立振子ロボットを作っているのを見つけた。興味深いのでメモしておこう。

オリジナルは、『からくり小僧』の iCHIRO 氏の LIBRA-ZERO/ONE 。こちらの記事も合わせて見ている。

モーター + 車輪:

    まず、モーターは、ギア付きの ステッピングモータ SPG20-1362。 (ぱんと氏は) これに、タミヤの 楽しい工作シリーズ No.96 オフロードタイヤセット を直接付けている。

      記事をみていると、 オフロードタイヤセットの(ホイールではなくて)タイヤが外れる? -- みたいなことが書いてあった。iCHIRO 氏は 同じシリーズの ナロータイヤセットを使っている。ただ、ちゃんとセットアップできれば オフロードタイヤセットの方が良いようなことも書いてあった。

      ... なかなか タイヤの選択も難しいらしい。

    いままでにも、倒立振子ロボットに興味を持ったことはあるのだが、駆動部のトルクと速度をどうするのが良いのか分からなかったので、パスしていた。なるほど、SPG20-1362 が具合が良いのか。-- この組み合わせで 倒立振子ロボットとして実績があるというのは 心強い。

モータ用電源

    モータの駆動電圧は 15V 近いようだ。オリジナルの LIBRA-ZERO/ONE では PIC の PWM で 昇圧 DC-DC コンバータを自作している。

    キーになる要素をメモすると ..

    表面実装用(SMD) インダクタ (27uH, 3.1A) を使用し、PWM周波数は、200KHz位。出力電圧14.4Vで 電流0.4A (5.76Wの出力) 。入力は約4.8Vで2.0A (約60%位の効率)

    この DC-DC コンバータは I2C デバイスとして実装されているとのこと。

その他の部品

    (ぱんと氏は) センサに、小型圧電振動ジャイロモジュールを使っている。

      iCHIRO氏も 使っているのは ジャイロセンサ 秋月の旧製品? 。それはともかく、ジャイロセンサは、角加速度を検出するものではなく、角速度。ふうむ Gセンサは使わないものなのか。

    モータドライバは、何だろう? ユニポーラ型だそうだから、表面実装用トランジスタアレイTD62083AFNG とかで十分? 8ch だから これで 2 個のモータを制御できるし。

モーターを回すだけでも 電源の問題もあるし、なかなかに手応えがありそうだ。その上で 倒立振子 としての制御 、さらに 自由に動かすための制御 がある。

駆動系を作るのは比較的簡単そうで、動かすのに頭を使う。なかなか良さそうなテーマだ。 実際に動かすのも狭い場所で楽しめそうだし、その面でも良い。

部品についても、良い物が結構安く手に入るようになってきた。良い時代になったものだ。

その他のメモ

SPG20-1362

    今は、SPG20-1332 と 2 種類がある。以前は SPG20-332 というのが売られていたのだが、性能が上がってコンパクトになったのが、SPG20-1332 。1332 は、1 ステップ 0.75°で遅い。1362 は、1 ステップ 1°で若干高速で こちらの方が 倒立振子 として向いているそうだ。

      (参考) からくり小僧:ステッピングモータ(SPG20-1362)を使ってみた

      これを見ると、高速回転ではトルクが低下していく。グラフを見ると 600 pps ぐらいで半分。とりあえず 限界を 720 pps と仮定すると 2 回転/秒 (= 0.083sec/60°)。55mm のタイヤなら 35cm /sec 。このときの トルクは 25 mN・m ぐらい ... 1N・m = 10.2 kg・cm だそうだから 0.25 kg・cm ?

      無理やりサーボモータで使われる単位にしてみたが ... 速度はサーボモータ並みだけれども トルクは(小型のものと比べても)はるかに(一桁) 小さい感じ。

    データシートを見ると 2W と書いてある。抵抗は 68Ω。電流を流しつづけたときに 14.4 ^2 / 68 = 3.0W だから こんなもの? 電流的には 14.4 / 68 = 210mA (最大) 。0.4 A 流せれば 2 個駆動できる。

DC-DC コンバータ

    AVRで再実装するとして、PWM は 8MHz が使えるから オリジナルと同じ条件。200kHz だと 40 ステップ。ステッピングモータの駆動専用だから、スイッチングの ON/OFF 制御だけでも良さそうな。

    Nch MOSFET は、平均 2A は 流せないといけないが、どういうのが良いのだろう?

    20V耐圧の SOT-23 品を使うとか ... デジキーになってしまうが、DMG3420U,DMG3415U , IRLML6246 とか。-- Pch版が 秋月にあるもの を選んでみた。
    これらだと、AVR を 3.3V で使うことにしてもちゃんとスイッチングできる。秋月にあるのは、VGS が高いので、4.8V のバッテリーをそのまま電源しないといけない。

    あるいは、秋月で手に入る SO-8 パッケージ シングルの FD5680 (60V , 8A) を取り敢えず使うことにしておいて、デジキーで 手に入る DMS3016SSS に置き換え可能にするとか。

    それはともかく、モータ専用で凝らないなら Tiny13A 程度でも作れそう。

タイヤ

    楽しい工作シリーズだと、

      No.96 オフロードタイヤセット
      No.145 ナロータイヤセット
      No.111 スポーツタイヤ
      No.193 スリムタイヤセット
      No.194 ピンスパイクタイヤセット

    と各種ある。直径 55mm 前後 が安心だが、もうすこし小径でも良いらしい 。他のメーカだと MYU-004 あたりが使えるかも知れない。

(不完全)パーツリスト

SPG20 モーターの代替

    SPG20-1362 のようなギア付きのステッピングモータは、入手が難しい。秋月で安く手に入るから良いが、いずれは在庫がなくなるだろう。手に入らないようになるとすれば .. どうするのが良いのだろう?

    だいたいの性能は、最大 2 回転/秒(120RPM) で トルクは 0.25 kg・cm 程度。( 静止トルクはこの 4 倍ぐらい)。120RPM ぐらいまでで これ以上のトルクがあるものを探せば良い。

    ダブルギヤボックス

      4つのギア比を設定できる。その中に 114.7:1 のギア比があり 115 RPM / 0.8 kg・cm だそうだ。

      車軸の位置は 2 通りあるが、114.7:1 のとき 車軸の位置は外側になるので、問題なさそう。

    ツインモータギアボックス

      227 RPM / 0.42 kg・cm 。少々早く トルクが少ない。

      車軸の位置が良さそう。

    このあたりの ギアボックスが 速度・トルクの面で使えそう。これが使える以上他のものを探す必要はないぐらいに思える。モータは最大 3V 。逆回転が必要なので、フルブリッジ(モータドライバ)も必要。

    問題は回転速度検出だが、中間のギアが露出しているのだから、ストライプ状に塗って、反射型フォトリフレクタ を使えば良さそうな気がする。ただしノウハウがないので どうやるのが適切なのかは分からない。

    あと、DC モータなので、(電圧ではなく)電流をモニタしていれば、回転数は分かるのではないか? 10000 RPM というと 166 Hz 。この値か その 2倍の周波数で 電流が変化するに違いない。

    モータドライバは、秋月で扱っている BD6211F-E2 が良さそう。正転・逆転 ができて、PWM での 速度制御もできるようだ。ボリュームを使った 電圧での回転制御すら可能で なかなか興味深い。

    (参考) モーター性能比較表

      上記のギアボックスは、FA-130 モータを使用している。このモータは ミニ四駆でも使われているので、高性能モータが いろいろ存在する。モータ置き換えも考慮に入れた方が良さそう。

ステッピングモータ制御覚書

    Wikipedia にも 項目があり 制御の仕方の説明がある。

    回し方の基本方式は、一相励磁 と 二相励磁。二相励磁は、2 個のコイルに同時に電流を流すやりかたで、トルクが強いらしい。なら基本はこれ?

      一-二相励磁 というのもある。二相励磁のタイミングを変えて 一相励磁の状態が間にある感じ? なめらかになるだけで、トルクは変わらない?

    回し方の原理は簡単だが、負荷が大きすぎたり、パルス周波数が高すぎると脱調する。脱調しないように制御することが重要。

    負荷が小さければ、電圧は高くなくて良いはず。5V でも 制御の実験はできるかも知れない。DC-DC コンバータ自体が怪しげなら、5V でとりあえず制御の基本コードを作るという方針でも良いかもしれない。

    さて、脱調しないようにするには、回転のスタートとストップで 加速度が一定になるような 制御が必要。ものには慣性があるから 当然だ。また、どこまでも速度を上げられるわけではないから、ある速度に達したら その速度を維持する。

    基本はこういうことだが、倒立振子だから扱うものは基本的に加速度。定めた加速度を発生させるような 機能になっていないといけなさそう。

    それを守った上で、目標の速度にしたりすれば良い? あとは移動距離。方向転換とかは、移動距離をベースにした制御?
posted by すz at 00:06| Comment(0) | TrackBack(0) | 日記

2012年05月14日

ACT8796

興味深い電源IC を見つけたのでメモ。

    Android Tablet に使われている電源用IC として Active-Semi の IC がある。

    ここ を見ると各プロセッサー向けにカスタマイズした電源ICを提供しているようだ。

    所有している Tablet の Novo7 Paladin は、JZ4770 という MIPS の チップを採用しているが、それ用の ACT8600 というチップを使っている。これの データシートがダウンロードできるので見てみた。

    なんと 1つの昇圧 DC-DC コンバータ(OTG 用 5Vに使う)、3つの降圧DC-DC コンバータ(3.3V , core電圧 , DRAM 電源?)、5 つの LDO(レギュレータ) を持っていてさらに バッテリー(1セル)の充電まで出来る。すべての電源をこれだけで管理できて、結構すごいと思ったのだが、Tablet の中に入っているもので、電子工作には無関係。単独で入手もできそうにない。

    では、入手可能で データシートも入手できるものはないかと探したら、1つ見つかった。それが ACT8796 。パッケージは、QFN24 (0.75mmピッチ) で 敷居は高いものの電子工作で一応使える範疇。

    チップ自体は、taobao で入手できる。値段はいろいろあって どれが妥当なのか 判別しがたいが 10個 42元(600円ぐらい?)のところ がある。

    さて、このチップの機能は 3 つの降圧DC-DC コンバータと 3つの LDO 。そして、(LDO も含め)それぞれの出力を、I2C で設定できるようだ。AVR と組み合わせて 実験用の 電源にするとか ... バッテリー駆動の なにかを作るときの電源にするとか ... なにか有用な使い方があるかも。

PowTech PT1502

    ついでに電源用 IC PT1502 のメモ

    これも taobao で購入可能 + データシートあり。

    こちらは、バッテリー充電 機能に加えて 降圧 DC-DC コンバータ + LDO 2 つ。I2Cなどはない。充電関係では、AC アダプタ , USB を区別できる。あと Power-on 回路。AVR とかをバッテリーで 制御するには便利かも。 降圧 DC-DC コンバータ は 1.2V とか core 電圧向きで、ARM とか FPGA/CPLD でも使えそう。

    降圧 DC-DC コンバータの電圧は、FB の分圧抵抗で決める。LDO1 は 3.0V 固定。LDO2 は、(ピン設定で) 2.5/2.8/3.0/3.3V から選べる 。

      PowTech PTxx を買うなら、taobao の この店が 良さそう。PT1502 だけでなく、1セル充電IC(PT6181) , LED 向け昇圧IC(PT4181) , 降圧 DC-DC(PT1281 等) を扱っている。ただ、値段が 安すぎで 不安 -- なにか誤解しているかも。

posted by すz at 23:26| Comment(0) | TrackBack(0) | 日記

2011年10月08日

Foca_V2.1

goodluckbuy.com を見ていてこんなのを見つけた。



http://www.goodluckbuy.com/ft232rl-tiny-breakout-foca-v2-1-usb-to-serial-uart-xbee-.html
FT232RL Tiny Breakout Foca V2.1 USB to Serial UART Xbee $10.32 (送料無料)

    これは何かというと XBee を PC で使うための UART ボード。5pin の端子も出ていて RxD/TxD/DTR を使って Arduino というか ブートローダを書き込んだ ATmega328p などに接続できるようだ。AVR の ISP っぽいコネクタのパターンもあり、どうも avrdude-serjtag でライタになるようだ。

    なかなか、良さそうなボードだ。特に ATmega328p のチップ単体を Arduino として使うには便利そう。ちなみに、サイズは、45mm x 20mm と書いてあるが 間違い。XBee の幅は、24.38mm 。-- データシートを見たら 45.72mm x 29.21mm と書いてあった。タカチ SW-55S にも収まるサイズ。

      データシートの 幅も間違い。やはり 25mm に近いはず。だが、下記の考察は、XBee の幅を元にしているので結論は変わらない。

    それはともかく、気になったのは、デザイン -- まるで小さな arduino のようではないか。
    なにか、Ardduio 風のものを 5cm x 5cm 以内で設計してみたくなった。これについて、あとで考えてみよう。

http://iteadstudio.com/store/index.php?main_page=product_info&products_id=94
FT232RL Tiny Breakout - Foca v2.1 $8.90

    さて、もうすこし調べたら オリジナルは、これだと分かった。iteadstudio.com というと Fusion PCB と全く同じサービスをしていたところ(今はちょっと違う?)。-- こんなボードまで開発していたのか。

    値段はちょっと安いが、送料は別にかかる。これだけを買うなら goodluckbuy.com のほうが安そうだ。



    http://iteadstudio.com/store/index.php?main_page=product_info&products_id=396
    [Bare PCB] Foca v2.1 (FT232RL breakout) Bare PCB $1.5

    ボード単体も売っている。裏面をよく見れば、まさに AVR ライタ用だとわかる。ちなみに、電圧は 3.3V or 5.0V で中央のスイッチで切り替えるようだ。

    あと、スライドスイッチやタクトスイッチは、日本で入手しやすいものではないかも知れない。ボードを買って自作する場合は、要注意。

    http://iteadstudio.com/store/index.php?main_page=product_info&products_id=329
    Slide Switcher 1P2T (10Pcs) $2.0

    スライドスイッチは、たぶんこれ。必須だから、ついでに買っておくべき。

    http://iteadstudio.com/store/index.php?main_page=product_info&products_id=334
    2.5mm SMT Momentary PUSH Button (10 Pcs) $0.7

    SMD 2 極のタクトスイッチはこれ。

    http://iteadstudio.com/store/index.php?main_page=product_info&products_id=376
    ET1117-3.3V(SOT-89) - 3.3V Positive Voltage Regulator (5 Pcs) $1.0

    3.3V レギュレータ。これも。

    http://iteadstudio.com/store/index.php?main_page=product_info&products_id=336
    Mini USB 5-Pin SMT Female Connector Socket (5pcs) $2.00

    USB miniB は、微妙。信頼性を考えると、日本製のパーツが使いたくなる。だが安い。ついでに買っておけ... という気もする。そう考え出すと 秋月より 安いものが多々ある。2.54mm ピッチのピンヘッダ・ピンフレームとか。沢山買い込みたくなる -- かなり危険だ。

    そもそもボードが安いからといって自作を考え出すのが危険な考えなのだ。製品があるのならすなおにそれを買っておくほうが安く済む。

arduino 風のボードについて

    MPU の条件は、実装面積から判断して USB をサポートしていること。そうなると ATmega32u2 か u4 しかない。u4 は、機能が豊富だからこれが候補。

    ATmega32u4 の Arduino -- Arduino Leonardo がもうすぐ出る。そういう理由からも u4 を使いたい。Arduino Leonardo は、低価格版とも言われているから、大きなサイズで良いのならすなおに使えば良いのだ。わざわざ自作する必要はない。

    ちいさなモジュールとしては、Adafruit 『Atmega32u4 Breakout Board+』 や 『Teensy』 がある。モジュールは、Arduino とは逆で ボードの上に載せるのが普通。

    Arduino 的に マザーとして使って、かつ小さいものがあっても良いかも知れない。Fusion PCB で 基板を作る場合 5cm x 5cm に収まると安くなるという事情もある。-- Arduino 本体やシールドの最小幅は 5cm をわずかにオーバーするので具合が悪い。



    実は、以前 ATmega32u4ボード を作った。このときは、その前の作品との互換性を考えてコネクタを短辺につけた。基板サイズは、47mm x 35mm ぐらい。1/2 に切った C 基板を付けられるようにしている。

    だが、コネクタを長辺につけて arduino 風にするのも面白いかも知れない。ちょっと考えてみよう。

    まずは、Foca を基準に考える。

      Foca_V2.1 の サイズは、45.72mm x 29.21mm 。XBee のためのコネクタは、2mm ピッチ で両サイド 1x10。
      2mm ピッチコネクタの 間隔は、22.0 mm 。

      思ったより幅が広い。 あと 2mm ピッチ はちょっと使いにくいかも。

    次に今まで作ったボードからの考察

      C 基板を 真ん中で切ると縦 47mm 横 35mm ぐらいになる。このサイズは、タカチ SW-55S に入るのだが、底面に置くには、幅がちょっと広い。幅 32mm ぐらいがちょうど良さそう。

      C 基板の短辺の端の穴の数は、13 。(次の列は 15 穴でその次から 17穴) 。1/2 に切ったときの 短辺の穴は最大 13 だが、1列分小さく作るなら 12 。

      このサイズ 17穴 x 12穴 分をベースにすると 43.18 mm x 30.48 mm のサイズになる。これに余白が必要で、C 基板が 47mm であることから計算すると 47mm x 34.3mm になる。だが、3mm φの穴をあけないなら、こんなに余白はいらない。... 1mm づつ四方を削ると 45mm x 32.3 mm 。(余白は、0.91mm)

    このエリアに Foca の パターンを置くと 左右が それぞれ 3.24mm あく。ここに 2.54mm ピッチのコネクタを置ける。3mm φの穴 を無視して、コネクタは、1x14 にすれば良いと思う。

      12穴ぶんのエリアの 左右に 2.54mm ピッチのコネクタを配置するとその内側は、10穴分 -- 25.4mm 。
      2mm ピッチのコネクタの厚みが 2.0mm だとすると .. 22.0 mm + 2mm = 24mm 。計 1.4mm の余裕があるはず。

    さて、Foca との関係はどうしよう。2.54mm ピッチのコネクタは、位置は違っても Arduino Leonardo と互換性があるようにしておきたい。その上で XBee 用 2mm ピッチを付けたいところだが、配線できるのだろうか?

    シリアル出力と ISP はどうしよう。ATmega32u 自体の ISP は必要だから付けるとして ... ライタとして使える ISP も付けたい。で、それを USART ベースにする。(TXD/RXD/XCK とあと 1つ) USART は SPI マスタとしても使えるから これが良いはず。

      そういえば、ATmega32u4 に対応した自製のブートローダ(USBasp 互換)とか、USBasp 互換 ライタも作ったのだった。USBasp 互換 ライタ は 未完ながら TPI/PDI に 対応させようとしていた。これらを使う上で問題ないようにしておかないと ... 忘れてはいけない。

      思い出した、TPI は 5V 対応でないといけない。手持ちのボードは全部 3.3V だからテストが止まったのだった。Foca と同様に 3.3V - 5V の切り替えスイッチを入れなければ。

    時間が取れたら、この構想をベースにして、基板を設計してみたい。

Arduino Leonardo のピンアサインとか

    stastaka's Blog の情報を元にすると...

      mega328p mega32u4 mega32u4 mega328p
      D0 PD0(RXD) PD2(RXD) PF0(ADC0) PC5(ADC5) A5
      D1 PD1(TXD) PD3(TXD) PF1(ADC1) PC4(ADC4) A4
      D2 PD2(INT0) PD1(SDA) PF4(ADC4) PC3(ADC3) A3
      D3 PD3(INT1) PD0#(SCL) PF5(ADC5) PC2(ADC2) A2
      D4 PD4(T0) PD4 PF6(ADC6) PC1(ADC1) A1
      D5 PD5(T1) PC6# PF7(ADC7) PC0(ADC0) A0
      D6 PD6(AIN0) PD7#
      D7 PD7(AIN1) PE6

      D8 PB0(ICP) PB4
      D9 PB1(OC1) PB5#
      D10 PB2(SS) PB6
      D11 PB3(MOSI) PB7#(RTS)
      D12 PB4(MISO) PD6
      D13 PB5(SCK) PC7#
      GND
      AREF
      SDA (?)
      SCL (?)

      TXLED PD5(XCK/CTS) PB0?
      HWB PE2

      D14 PB0(SS)
      D15 PB1(SCK)
      D16 PB2(MOSI)
      D17 PB3(MISO)

    転記ミスがあるかも知れないが ... まぁだいたいこんな感じらしい。# は負論理 -- ソフトでの処理のはず。ATmega332u4 では、TWI は、PD1/PD0 が割り当てられている。もとの SDA/SCL を省いてしまえば、16 pin/16 pin にできる。

    SPI は、コネクタに出ていないようだ。そうであれば、ライタ用の ISP コネクタに接続しておきたい。ただ、確定ではないから Arduino Leonardo の 回路図をみてから再考することにしよう。

      やはり、コネクタに出ていないのはおかしいような -- SPI をあてにしているシールドも多数あるはず。二重に接続するとかしているのだろうか? それとも低価格版ということで割り切っている?

      アナログスイッチで切り替える -- みたいな実装もありえるのだが... 写真をみてもそんな IC は載っていなさそう。

    一方 XBeeShield なるものが、ある。本来なら 互換回路を組み込むべきかも知れないのだが ... XBee使わないなら切り離さないといけないし ... ちょっと面倒そうな。

    ちなみに Foca の場合、TXD/RXD/RTS/CTS/DTR/DCD を接続して Xbee の RESET をボタンに接続している。

    ついでに、Seeeduino Stalker (Atmega 328) というのがある。これは、FT232R がないかわりに多数のデバイスを載せたもの。XBee も載せられる。

      Foca XbeeShield Stalker
      1
      2 DOUT RXD o RXD
      3 DIN TXD o TXD
      4 CD DCD
      5 RESET button button
      6 RSSI LED
      9 DTR DTR
      12 CTS CTS o
      15 LED
      16 RTS RTS
      17 AD3 AVR RESET(with Tr)

    信号線だけピックアップするとこんな感じ。XbeeShield は、あまり線を接続していない。

    ATmega32u4 には、CTS と RTS の信号線がある。これに加えて DCD/DTR を定義してつなげたい。
    ただ、Arduino Leonardo では、CTS が、LED 制御に使われているようだ。どうしたものか。

      Foca の XBee は、Host から使うのが前提。それに対し XbeeShield , Stalker は Slave 用で、配線の違いはそれが関係している。また、XbeeShield は、5V の Arduino に接続できるようになっているが、Foca, Stalker は 5V での XBee 使用 は考慮していないように見える。

      では、作ろうとしている Arduino 風のものは、どう考えるのが良いのだろうか? -- Host との USB 接続が特徴と考えれば、Host 向きの接続で良いはず。

    Arduino Leonardo の疑問点は、(1) SPI の扱い 、(2) TWI の扱い、(3) CTS の扱い。回路図が公開されたら、これらをチェックしよう。

独自配列の考察

    どうせ shield に互換性はないのだから、独自配列でも良いような気がしてきた。もとの Arduino も mega88 系に都合の良い配列だったのだ。配線面積が少ないのに、互換性を求めると 配線がスパゲッティになる。それに、互換にすると CTS とか困るケースが出てきそうだ。

    Foca V2.1 の機能を実現しつつ Ardino 風にする ということでも良いのかも知れない。コネクタを 2mm ピッチにして ピン数を増やし、XBee (Host)も載る みたいなのはどうだろう。こうしたほうが見栄えが良くなりそう。もちろん XBee を載せた場合は、他の目的には使えない。(これはもとから)。

    ただ、2.54mm ピッチも付かないと 使い勝手が悪い。2.5mm ピッチは変換基板のように 同じ配列で外側につけるとか。(ただし、配線が辛くなるので、平均 5ピン毎に 2mm ピッチの信号を間引く )

    ちなみに、2mm ピッチのピン・フレームは、背が低い。XBee のように 25.4mm - αの幅にしないと 2.54mm ピッチ の ピン・フレームと競合する。

    電圧の、3.3V / 5V 切り替えは必須。ただ、スライドスイッチの配置が難しいかも。

    Arduino として使うときは、定義ファイルを 作らないといけない? 互換性を捨てた代償がそれだけならば、これで行っても良いかも。

    追記: 定義ファイルは何だろう?

    https://github.com/arduino/Arduino/tree/new-extension/hardware/arduino

    たとえば、ここでソースコードをブラウズできるようだ。

    見てみると、『hardware/arduino/variants/leonardo/pins_arduino.h』というのがある。

    あと、『hardware/arduino/boards.txt

    この 2 つで事足りそう。

    leonardo.build.f_cpu=16000000L
    leonardo.build.core=arduino
    leonardo.build.variant=leonardo

    valiants/xxx/pins_arduino.h を作成し、build.variant を xxx に変更すれば、好きなピン配置にできるように見える。

XBee のピン配置のメモ


    3V3 1 VCC AIO x 20
    RXD 2 O DOUT AIO x 19
    TXD 3 I DIN AIO x 18
    X 4 x AIO x 17 X
    5 I RST RTS I 16 RTS
    6 O RSSI O 15
    7 I VREF I 14 AREF
    X 8 x reserved ON O 13 X
    DTR 9 I DTR CTS O 12 CTS
    GND 10 GND x 11

    上が Foca の USB 側、XBee はアンテナ側。

    内側が XBee の割り当て。x は、デフォルト disable で I,O はデフォルトの入出力。

    外側の X は、間引くところ(予定)。TXD などは割り当てる信号とか。それ以外は mega32u4 の信号を振っていく。コネクタは下に伸ばす。どこまで伸ばすかは未定。

Foca のディメンジョン



    この画像は、355 x 196 に縮小したもの。縦を 45mm とすると 1.77 inch これを x200 すると 354 -- 横は 0.98 inch - 24.9 mm という計算になる。

    さて、2mm ピッチを下に伸ばすとして... 1x20 は、入らない。1x16 ぐらいがせいぜい。
    横につける 2.54mm ピッチは、2mm を間引く。3pin 間引けば 1x13 だがパーツの都合では 1x14 が良い。8+6 もいけるし。あるいは、12 ?。

    2mm のピンフレームは、秋月だと
    http://akizukidenshi.com/catalog/g/gC-03669/
    http://akizukidenshi.com/catalog/g/gC-03871/

    の 2 種類がある。いずれも 1x20 で切って使わないといけない。XBee の分のみで良いなら 1x10 もある。

    iteadstudio.com だと こんなのがある。

    http://iteadstudio.com/store/index.php?main_page=product_info&products_id=119
    2.0mm 40Pin Female Header (5 Pcs) $1.50

    どうせ切るならこれで良いかも。

    ところでこれらは背が低い。プラスチック部:約4.3mm ? (2.54mmピッチは約 8.5mm) これだから Arduino 風に見えるのだ。
    デザイン優先で 2.54mm ピッチをなしにしたいところだが、そうもいかないだろう。

    2.54 mm 1x14 は秋月では、これ。
    http://akizukidenshi.com/catalog/g/gC-00653/

    iteadstudio.com だと、1x40 がある。切って使えば随分お得。

    http://iteadstudio.com/store/index.php?main_page=product_info&products_id=117
    2.54mm 40Pin Female Header (5 Psc) $1.50

    ー どうもなんでも 5 個 $1.50 のようだ。原価はずっと安く管理費用のほうが支配的なのか?

    ところで、電源切り替えの スライドスイッチは、どうしよう。4.3mm の高さに抑えるか、

    http://akizukidenshi.com/catalog/g/gP-01665/
    超小型スライドスイッチ IS−1250
    http://akizukidenshi.com/catalog/g/gP-02627/
    超小型スライドスイッチ 2回路2接点 IS−2235

    を付けることにして、上部の ノブ(?) を切る? 本体は 3.5mm 高だから 一応収まる。

    http://akizukidenshi.com/catalog/g/gP-03006/
    リセット用のタクトスイッチは、やっぱりこれ? いままでと同じように、ファームウェア書き換え専用。

    これに LED も 付ける。... と入らないおそれが... 裏に mega32u4 を付けることになるかも知れない。

    コネクタは、自分自身の ISP と シリアルは出したい。できれば、ISP も SPI に転用可能にしておきたい。

    シリアルは、TXD/RXD に XCK(or CTS) に加えて DTR(ピン未定) 。ISP は、ジャンパで RESET/SS 切り替え。SparkFun FTDI Basic Breakout と同じ配列にして 1x6。-- DTR/RXD/TXD/VCC/CTS=XCK/GND 。こうしておくと、シリアルも SPI として使える。

名称について

    なにを作るのでも名前を考えないといけない。ファイル名もあるし、最初に必要で、これが超やっかい。

    しょうがないので、なにか考えるのだが、O-duno (小角)にした。i がないが、まぁいいや。

    意味は、『小さい Arduino のつもりだが何か足りない』とでもしておこう。



    超ラフなレイアウト。以前作ったボード をもとにして作った。2.54mm ピッチ 1x14 でも 悪くないかも。だが、高さがあるから実際につけると不恰好になるかも知れない。

    それはともかく、主要部品は表に置けそうだ。だが、水晶や CR は、裏になりそう。

    あと、ISP を SPI として使うためのジャンパ -- 3穴 2.54mm は厳しいかも。

    http://akizukidenshi.com/catalog/g/gP-02736/
    小型スライドスイッチ 1回路2接点 SS12D01G4

    とかを使えるようにしておきたいところなのだが... ううむ。

    そういえば、
    http://akizukidenshi.com/catalog/g/gP-03908/
    2mmピッチジャンパーピン

    なんてのも買えるようになった。これで済ますか。リセット を接続するかしないかなら 2穴で済むし。



    すこしまともにしたレイアウト。コネクタの部品を作り予定の位置に置いた。あと 2mm ピッチのジャンパを作り基板外に置いた。

    リセットボタンの位置がわるい。押しやすいところに置くべき。



    とりあえずこうしてみた。電源切り替えスイッチの収まりガ悪い。
    2mm ピッチと 2.54mm ピッチの関係を分かるようにした。



    スイッチを
    http://akizukidenshi.com/catalog/g/gP-02736/
    小型スライドスイッチ 1回路2接点 SS12D01G4

    に変更。
    あと、ピン名をコメントとして入れた。
    ISP/SPI 切り替えを 2mmピッチジャンパーピンでできるようにした。
    HWB を ジャンパーしたときだけ Enable にしようかと思う。

      HWB ピンは HI-Z 入力なので、確実に Disable にしたければ、弱いプルアップが必要。ジャンパで Enable にするには強いプルダウンか接地にする。

      以前 LED をつないだら 明るいところでは Disable / 暗いところで Enable になったりした。それはそれで興味深いが実用的ではない。



    かなりのところまで配線完了。

    ISP/SPI, シリアルのコネクタは 180°回転した。こっちのほうがうまく配線できる気がする。

    ただ、このまま進めて良いものかどうか? XBee のピン配置をベースにするとあんまり美しくないのだ。CTS が反対側に行くのがちょっと困る。

    というわけで、CTS も (チップの機能を使わない) PORT にして、画像の下側は PORTD メイン、上側左は ADC(PORTF) メイン、上側右は SPI(PORTB) という風になった。



    完成。2mm のみのボードを想定して、リセットの位置を内側にした。あと、シルクの作成。
    Serial の DTR は、PD4 にした。

      Digital 側
      1 VCC
      2 RX PD2
      3 TX PD3
      4 () PB7(RTS)
      5 SDL PD0
      6 SDA PD1
      7 () PD4
      8 GND
      9 () PD5(XCK/CTS)
      10 () PD6
      11 () PD7
      12 3V3
      13 5V
      14 RST

      Analog 側(#14 から)
      14 () N.C.
      13 () PE6
      12 () PF0(ADC0)
      11 () PF1(ADC1)
      10 () PF4(ADC4)
      9 AREF AREF
      8 () PF5(ADC5)
      7 () PF6(ADC6)
      6 () PF7(ADC7)
      以下 SPI
      5 () PB3(MISO)
      4 () PB1(SCLK)
      3 () PB2(MOSI)
      2 () PB0(SS)
      1 GND

      Serial
      1 DTR PD4
      2 RXD PD2(RXD)
      3 TXD PD3(TXD)
      4 VCC
      5 XCK PD5(XCK/CTS)
      6 GND

      ISP/SPI
      MOSI 1 6 VCC
      SCK 2 5 MISO
      RST/SS 3 4 GND

      (V 1.0 t1 -- 間違い)
      MOSI 1 2 SCK
      RST/SS 3 4 GND
      MISO 5 6 VCC

      LED
      PC6 Red/Orange
      PC7 Green/Yellow

      HWB ジャンパ。ショートで HWB有効。
      ISP/SPI ジャンパ。1-2 で ISP, 2-3 で SPI

      未割り当てのピン PB4/PB5/PB6 PE2(HWB 専用)


  • oduno-1.0.zip (eagle データ)
  • oduno-1.0-out.zip (http://iteadstudio.com 提出用)

    今回は、iteadstudio.com で作ってみよう。5cm x 5cm 10枚で $9.9 なのは同じで送料は $4.0 。
    ルールは、前の Fusion PCB と同じような感じ。ファイル名どうとかは、ないようだ。

    あんまりチェックしていないのだが、前に作ったものを元にしているし、ひどいことにはならないだろう。

  • 来たメールに リプライするのではなく pcbあっとiteadstudio.com に送るらしい。即効で怒られた。

  • ISP のピン配置を間違えた。ピンヘッダの番号で割り当ててしまった。作り直さないと。

  • oduno-1.0a.zip (eagle データ)
  • oduno-0.1a-out.zip (http://iteadstudio.com 提出用)
  • oduno-01a.png (イメージ)

    一応作り直した。が、自信がなくなってきた。『データを差し替えてくれ』とメールは送ったが、受け付けてくれるかどうかは分からない。まぁ、ピンの間違いだから動作自体には支障ない。他にもっと重要な問題があるかも知れないし、まぁいいや。

      もう 作り始めているからダメといわれた。まぁしかたない。

    ところで、タカチのケースに SW53 というのがある。厚みが 11mm しかないので、見栄えがする。( 蓋を止める枠 を除いた)内寸は、 (たぶん) 49.4mm x 32.4mm 。うまくすると Foca や O-duno が入るかも。(といっても ピンフレームをどうするか別途検討する必要あり)
posted by すz at 23:51| Comment(0) | TrackBack(0) | 日記

2011年09月29日

PS/2キーボード関係のメモ

PS/2→USB変換器を6製品試す』 の記事を読んだ。結論としては、気に入る『PS/2→USB変換器』はなかったとのこと。

これぐらいなら、電子工作で作れそうな気がする。市販品で気に入らないなら 気に入るような仕様で作れば良いから、実用として役に立つものになるかも知れない。

 − 電子工作を趣味としていても、実用として役に立つようなネタは少ないのでメモしておこう。

そういえば、私の愛用キーボードは、PS/2 の HHK lite2 でインターフェイスは PS/2 だ。そして KVM につなげている。で、PFU の サイトをみてみると ... HHK lite2 は、USB のみになっている。

http://www.pfu.fujitsu.com/hhkeyboard/lite2/

まぁ、USB でも困らないのだが、KVM を活かしたいなら 『USB→PS/2変換器』 が欲しくなる。これは、電子工作で作れるのだろうか?

どうせなら、USB→USB で自由にキーマッピングを変えられるものとかも良いかも知れない。

... そういえば PS/2 マウスのほうが絶滅しかかっている。マウスも対応したほうが良さそう。


こういう前提で構想を練ってみよう。

チップの選定

    これは、文句なしに ATmega32u2 。いままで作ったライブラリがある。ただ、HID(HumanInterfaceDevice) はサポートしていないから、そこから作る。公開されているものだと LUFA を使うのも良い。あと USB の D+/D- を PS/2 として使えるような 機能も持っているので、変換アダプタが使えそうなのが良い。(ATmega32u4 も良いのだが、この機能は持っていない)

    これで、HOST との接続はできる。あとは、デバイス側。PS/2 マスタ は、XCK を使った同期シリアルでいけそう。ただしオープンコレクタ出力でないといけないので、外部デバイスがいる。 ちなみに ATmega32u2 は、5V での動作が可能で レベル変換で苦労することはない。

      D+/D- を PS/2 として使う場合、VCC でプルアップされ 特殊なポートとして駆動が可能になるようだ。... PS/2 は 5V だから VCC も 5V でないといけない。

    問題は、USB HOST 。Low スピード 1.5Mbps での 送受信を Port を使って制御する。V-USB など Device でも制御できるのだから HOST も原理的には可能なのだろう。ただ、電圧の問題がある。

    VCC が 5V ということは、PORT も 5V 。... となると 例によってツェナーダイオードのお世話になるしかないのだろうか? ... しょうがないのでとりあえずその方針にしよう。

    OTG 機能を持った マイクロコントローラなら、HOST にできるが ... どちらの変換機にするか最初に決めないといけない。USB→USB も無理。ものづくりとしては、こちらのほうが面白いはず。

信号線の割り当て

    D+/D- USB なのは当然だが、PS/2 の場合どちらを ( CLOCK信号/DATA信号 にするのか決められない。アダプタが 2通りあるはず。) 自動で判別できれば良いのだが、そううまくいくのだろうか?

    PS/2 デバイス側

      TXD(PD3) は、NPN Tr か Nch Mos FET で DATA信号を駆動。RXD(PD2) は、DATA信号 に抵抗を通して接続。
      同じように XCK(PD5) をCLOCK信号駆動用にして、別の PORT(PD4) を読み込みように割り当てる。

      あ、USART を使うと TX/XCK の極性 が逆になってしまう。インバータが必要。

    USB HOST (デバイス側)

      D+ に INT0 を割り当てたほうが良さそうなので、 PD0 を割り当てる。D- は PD1 。

      ソフトだけで PS/2 マスタを制御するのなら、逆変換のアダプタで PS/2 キーボードを接続することは、可能。その場合外付け の回路もいらない。問題は間に合うかどうか。割り込みを使わないなら、あるいはいけるかも。ちなみに 処理できないときは、CLOCK を L にしておけば良いらしい。

    HWB(PD7) FW 書き換え用。

      忘れてはいけない。あと LED とかも欲しい。

      ちなみに、5V で動かすので、UVCC/VCC/AVCC は VBUS (5V) に直結。

開発関係のメモ

    デバッグする環境は頭がいたい。

    まず、PS/2 キーボードやマウス を接続する方。PS/2 キーボードやマウス 自体の入手が難しい。まさか現役のキーボードで最初のテストをするわけにもいかないし。また、日本語キーボードは何通りかあって、くせがあったはず。PS/2 マウスは安いのを見付けたら買っておくのも良いかも知れない。

    次に HOST とのインターフェイス。PC しかない が、電源投入時にしか認識されない。また、最初のテストで PC を使うのは PC を壊すおそれがあり避けたい。


    http://www.dealextreme.com/p/slim-usb-2-0-to-ps-2-adapter-dongle-1440
    Slim USB 2.0 to PS/2 Adapter Dongle $2.58


    http://www.goodluckbuy.com/slim-usb-2-0-to-ps-2-adapter-dongle-1.html
    Slim USB 2.0 to PS/2 Adapter Dongle $2.64 (www.goodluckbuy.com)

    本末転倒にも思えるが、最初は、安物の『PS/2→USB変換器』を通してテストするのが良いのかも。起動後挿せば良いし、PCを壊すおそれも小さい。おかしくなったら抜けば良い。ただ、おそらく USキーボード専用で、(ちゃんとした)日本語キーボードのテストは無理だろう。

      だいたい PS/2 キーボードが US か日本語か 自動判別はできない。一方 USB キーボードは どちらか分かる(分かっていないといけない)はず。(自信なし)

      これらの種別の設定や キーマップの変更というのはサポートしたい。データは EEPROM に置くとして... 設定は、ツールなしで出来ると良さそう。アイディアとしては、NotePad を開いておいて メニューをキーコードの列を出力することで表示するとか...


    あとの問題は、ソフトの開発環境。別に ターゲットデバイスを用意する必要はない。ATmega32u2 ボードは既にある。( Teensy(1.0)互換ボード は今遊んでいる。)

    これだけで、まずは HID の開発ができる。その後は、2 pin だけで PS/2 デバイスを 制御してみる。PS/2 コネクタは持ってないし、ソフト USB 用として回路を組んで 逆変換アダプタで PS/2 キーボードやマウスをつないでみる。うまくいけば、まずは『PS/2→USB変換器』まで作れる。

    あと、USB に 変換アダプタを付けて PS/2 デバイスのテストはできる。PS/2 キーボードやマウスをつないで 『PS/2→PS/2』のテストもできそうだ。

    あとは、USB HOST のテスト。16 MHz という変則クロックだから V-USB をベースになんとかできるかやってみる。その前にツェナーを用意しないと。

PS/2 関係の製品について

構想2

    さて、ここまで読んでも、なにがしたいのかイメージできないと思う。
    どういう要素が使えるか、洗い出しただけに近いからイメージできないのも当然かも知れない。

    少しまとめてみることにする。

    1) 1:1 の変換

  • ATmega32U2 を使って USB or PS/2 - USB or PS/2 変換をするボードを作る。

  • ボード自体は、USB miniB - USB A メス のコネクタを付ける。

  • PS/2 に接続する場合は、USB - PS/2 , PS/2 - USB の変換コネクタを使う。

  • CPU は、5V 16 MHz で動作させる。-- UVCC/VCC/AVCC は VBUS (5V) に直結。

  • USB miniB の方は、普通に USB として配線する。

  • USB A メスの配線は、D+ = PD0/D- = PD1 。75 Ωぐらいの抵抗を通して接続し、3.3V の ツェナーダイオードで 電圧の制限をかける。

      PS/2 に変換するときは、3.3V までしか電圧が上がらない。が、たぶん大丈夫だろう。
      問題が起きるなら、ツェナーダイオードと GND の間に Nch MOSFET を入れたりすれば、良さそうではある。

      ツェナーダイオード の入手について :

      千石で リード部品 3.5〜3.7V or 3.2〜3.4V (リード部品 φ2.0 x 4.2mm) を扱っている。
      10 個 210 / 100個 630円。

      チップ部品なら、鈴商 とか。

      デジキーだと MM3Z3V3BCTあたり?

    このボードを使って、USB device, PS/2 device, USB HOST , PS/2 HOST のコードを作り別々にテストする。それが出来たら、実際の 『PS/2→USB変換器』や 『USB→PS/2変換器』 を作ってみる。PS/2 といっても キーボードとマウスは別のプロトコルだから、それぞれ別のものとしてファームウェアを作る。

    できたら、自動判別したいのだが、うまくいくかどうか分からない。最悪別々のファームウェアになる。また、『USB→USB変換器』や 『PS/2→PS/2変換器』も 対応できるようにしておきたい。

      ちなみに、『USB→PS/2変換器』は、ATmega32u2 っである必要はない。ATmega328p とかで十分。
      USB device を V-USB で作るのは無理(割り込み禁止で動作させたり出来ないため)


    2) 2:2 の変換

    次の段階では、キーボード、マウスを両方扱えるものを検討してみる。といっても 最初から考慮して設計しておかないと、ほとんど再設計になりそうだ。

参考資料
http://www.oadg.or.jp/ 『OADGテクニカル・リファレンス ハードウエア編』
http://ioiodesu.web.fc2.com/PS2/PS2.HTML PS/2 『マウス/キーボード プロトコルとインターフェース』

http://www.usb.org/developers/hidpage/
http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/usbkeycode.html 『USBキーボードのキーコード』

追記: PS/2 コネクタ(メス)

DealExtreame で扱っていた
posted by すz at 23:35| Comment(2) | TrackBack(0) | 日記

2011年08月21日

スナップドーム

以前 DealExtreme で買った 小型 Bluetooth キーボード を分解してみた。

写真(準備中)

このキーボードは、基板の上に メタルスナップドームと言われる ばねを置いて その上からフィルムを貼りつけてある。キートップは、ラバーで下向きにポッチが付いていて メタルスナップドームの中央を押すようになっている。金属製の枠で、ラバーを押さえるしくみ。

    フィルムは、単なる幅広のテープのようにも見える。ひょっとしたら PP のガムテープで済ませられるのかも。

これを見て、これなら 薄型の小型キーボードを自作可能では?と思ってしまった。

まず、メタルスナップドームだが、オムロンからも正規のパーツとして出ている。

デジキーだと これ

50 個 1082円、100 個 1947 円だそうだ。ちなみに データシートには、基板のパターンの作り方の説明があった。

他も探してみると ... なんと バネ屋さんが扱っていた。確かに スイッチのバネのみだから 扱っていても不思議はない。

例えば 『SWドームスプリング 』の ページで扱っている。ちょっと高い (100個 4000円) が、色々なサイズがある。

このメタルスナップドームは、タクトスイッチにも使われている。... 秋月の 『タクトスイッチ 100個セット』(700円) を分解して取り出すのが、もっとも安価に入手できる方法かも知れない。

    分解するのは、簡単で 上部の金属の枠をニッパで取れば良い。中に メタルスナップドームが入っている。-- ただ、ポッチが付いていない。うまく接触させる工夫が必要かも。

    ひょっとして、スルーホールのユニバーサル基板で簡単に実験できるかも。下側で配線して テープで貼るだけ -- これでうまくいくようなら、本格的なものを検討しても良いかも知れない。本格的なものといっても、とりあえず テスト用として 5cm x 5cm 以内の パターンを起こして Fusion PCB に発注してみるとか。

さて、これでキーボード(の基板部分)を作ったとして ... 4mm/5mm ぐらいの小径の メタルスナップドームだと 中央を的確に押す必要があり、キートップがないと実用としては使いづらい。

キートップはさすがに自作できないと思うが、ひょっとしたら既製品のキーボードを分解したら使えるものがあるかも知れない。

    確か ノートPC のパンタグラフ方式のキーボードはプラスチックのパーツが薄い メタルにつめで取り付けられていたはず。で、下にシートがあってそれを押すしくみ。うまくすれば使えるかも。

    ただそれを上手く使って作れたとして、気に入るものが作れるのかどうか?

    ゲーム・コンソールの補修パーツには、ボタンがある。スナップドームを使って、このボタンで押すようなものは作れるか。クリック感がある妙なボタンになるが、それも良いかも。それを作るかどうかは、別にしてこういうのを知っておくと応用が効く場合もあるかも知れない。

    あと BlackBerry のガワとかも売っている。キーボードの部分は、たしかプラスチックの部分のみで押すことはできる。このガワを利用したボードとかを作れるかも知れない。

追記 2011/09/22:

Mini Dip Momentary Tactile Button Switch 50-Pack 12x12x5mm $5.56 (goodluckybuy.com)

というのを見つけた。大きな スナップドームが入っていることを期待して、ちょっと買ってみることに。

他に
posted by すz at 15:00| Comment(0) | TrackBack(0) | 日記

2011年06月19日

UM232H

FTDI のドキュメントを調べる機会があって、見ていたら FT232H という Hi-Speed(480Mbps) のチップが出ていることを知った。このチップを使ったボード UM232H も FTDI から出ている。(データシート)



    デジキーの価格は、UM232H が 1801円。

    FT232R の AE-UM232R と比べれば高いし、シリアルが 12Mbps で動いたところで、普通の使用方法ではメリットはないだろう。

    メリットがあるのは、MPSSE を使った JTAG や BitBang 使うようなものや、SYNC 245 FIFO/FT1248 を使った 高速パラレル通信。MPSSE を使った JTAG は、最大 30Mbps , SYNC 245 FIFO は 40 MB/sec と書いてある。

    FT232R 用 BitBang ライタ も そのままで動いて、速くなるんじゃないかと思う。

      ちょっと見込みが甘かった。値は設定できるが、平均 550kbps ぐらいしか出ていない。(8bit x 2(ON/OFF) x 往復 だからデータの 転送レートは 2.2 MB/sec = 17.6M bps) 。 Full-Speed の性能は超えているから 確かに Hi-Speed だが、ちょっとしょぼい結果だ。

      AN232B-03:D2XXDataThroughput を見ていたら 1回の Write サイズを 3968 の倍数にせよと書いてあった。すなおに 3968 バイトにしてみたら 平均 2.3 Mbps になった。これならまぁいいか。

      (追記) FT_SetUSBParameter で 16KB を指定し、1回の Write サイズを 3968 x 4 にしたところ 3.87 Mbps まで出た。MPSSE の 1/5 ぐらいの性能だが、FT232R/245R 用の コードで動くのが、作る立場でのメリット。おまけでここまで出るのなら不満はない。

    従来から FT2232H があるが チャネルは 1つになった代わりに、安くなった。-- チップ単体だと FT232HL (LQFP48) が 383円。FT232R と比較できる価格だ。

    • FT1248 というのは、新規の機能のようだ。FT2232H にはない。

    • VCCIO は、3.3V のみ。これは、FT2232H も同じなようだ。5V トレラントにはなっている。

    最近は、FPGA に興味がシフトしているので、気になっている。

    JTAG では特に高速な方が良い。またパラレル通信の帯域はかなり魅力的。これぐらいの性能で PC とやりとり出来て、電子工作で使えるインターフェイスは少ない。しかもパラレルだから FPGA で受けられる周波数になっている。

部品についてのメモ:

チップも安いから、基板を設計したくなる。LQFP48 は小さいから AE-UM232R のサイズに入れられそうだ。互換ボードとか作ったから、いろいろ流用できそうだ。

ただ、ピン互換にするメリットがあるのかどうか? MPSSE がメインなら、シリアルとして config しないことになる。+αの機能を入れるなら SYNC 245 FIFO か FT1248 ではないかと思う。そうなると ピンが足りない... ような?

SYNC 245 FIFO/FT1248 を使わないなら、JTAG 専用で 良いではないかと言う気もする。.. となると Sparkfun FTDI Basic Breakout (3.3V) みたいなデザインが良さそう。(ただしピン互換は無理。RTS が必要だが 6pin に入っていない。)

  • MI0603J600R

    チップフェライトビーズ。60Ω@100MHz 。いろんな USB 関係の回路図で VBUS から 電源を取る場合に チップフェライトビーズを通している。 このチップは、Lattice の USB JTAG (FT2232HL) の回路図でも使っていた。UM232H だと 3 つ使っている。(VBUS からの 入力, VPLL, VPHY) 。

    秋月に BLM18PG600SN1D (1608, 60Ω@100MHz, 25個100円) があるので、ここで買う必要はない。ついでに買うなら ... という感じ。

  • PGB1010603

    USB D+/D- は直結なのだが、これが GND との間に入っている。ESD 保護用だそうだ。FT2232H の回路図にはないから、推奨といったところか?

      Arduino UNO の回路図みてたら、これが入っていた。思ったより一般的なのか?

      ちなみに、GND との間ではなく、SLD との間。SLD と GND の間には、BLM21 という チップフェライトビーズが入っている。値は書いてない。

  • MCR10(12K)

    1% 誤差指定の 12KΩが必要。買い忘れないようにしないと。

  • 93LC56BT

    UM232H の回路図では、SOT-23-6 の 93LC56BT を使っている。(16bit モードのある B でないといけないらしい 要注意)

  • NX3225SA

    表面実装型の水晶で、秋月で扱っている FA238 (3225サイズ) に置き換えられるのは、これ ... なのか?

    12 MHz が欲しいが、95 円もする。秋月の FA238 は、16/20/25 MHz のみだし、仕方がないか。

    .. ただ、ハンダ付けで一番苦労するのは、いつもこの水晶。ちょっと悩む。

  • NX5032GA 2pin SMD で安いというと こういうやつ。 73 円だし特に安いわけではないが、ハンダ付けが楽そう。ラジアルタイプは安いが、安っぽい感じがして嫌。固定する方法も悩む。

UM232R

    UM232H があるなら、UM232R もあるのか? ... と思ったのだが、同然ながらあった。
    で、データシートを見てみたら AE-UM232R とピン配置が 同じだった。

    ちなみに、AE-UM245R も UM245R もある。こちらはピン配置が違う。UM245R は、UM232R のチップを載せ替えただけのようなピン配置で、AE-UM245R は、秋月オリジナル。

追記(2011/10/8): ストロベリー・リナックスの FT232H モジュール
posted by すz at 19:48| Comment(0) | TrackBack(0) | 日記

2011年06月04日

コンピューターウィルス作成罪?

MiAU から 「情報処理の高度化等に対処するための刑法等の一部を改正する法律案」について慎重審議を求める声明 が出ている。

ソフトウェアをリリースしている立場としてかなり気になる。

『コンピューターソフトウェアの重大なバグ(瑕疵)の放置が提供罪に該当する事態がある』とのことだが、いくつか疑問がある。

ソースコードしか提供していないものがあるのだが、これは そもそも、『コンピューターソフトウェア』に該当するのだろうか? ビルドしなければ、動作することはないし、ビルド環境の違いで動作しないような場合もある。ー要するに 動作するものと ソースコードは、1:1 に対応しない。ビルドすら不可能な場合だってある。

それに、ビルドするときに改変して 『トロイの木馬』を埋め込むようなことは可能で、それは提供されたソースコードをみても分からない。

ソースコードの提供には、責任がないとすると ビルドして提供する側に責任があることになる。まぁ 『トロイの木馬』のような話もあるし、たぶん一般的な認識ではないかと思う。

    そうはいっても、法律を制定する側の 一般的な認識とは限らない。いままでの例から考えても、信頼しきることはできない。

次の疑問はライセンス。ほとんどの オープンソースのソフトウェアは、『AS IS で提供するものだから、いかなる保証もないよ』と(ソースには)書いてある。そして、それを了承することが 使用できる条件になっている。ビルドして提供するとしても、『使用できる条件』なのだから、ライセンスとして添付しての提供になるのが普通である。

オープンソースのソフトウェアは、無償であることが多い。『なんらかの保証を求めた時点で使用権を剥奪する』というのは、さすがに法的にも有効だと思うのだが、実際のところどうなのだろう?

ちなみに、有償のソフトウェアも同じような条項が付くのが普通である。保証するためのコストが価格に込められてないならば、やはり法的に有効であろうと思える。

でもそうであれば、重大なバグ(瑕疵)の放置って何だということになる。

だいたい、PL法でも ソフトウェア単体は 法の対象になっていない。命がかかわるような重大な問題であっても 対象にはならないのである。それには、ちゃんとした理由があるはずだ。

    実はちゃんとは知らないのだが、次の理由だろうと思っている。

    ソフトウェア単体では、どのように動作するかそもそも定義できない。OS やら ハードウェアを含んだシステムとして 定義しないと 動作の定義は不可能で、そういうものは普通装置として認識される。

    (装置であれば、PL法の対象になる。)


まぁ、こういうわけでソフトウェアにたいして、責任を追求するのは無理がありそうな気がするわけだが、無理が通される可能性はある。

さて、次の疑問。放置って何?

私の認識では、バイナリが違えば別のソフトウェアである。

    というか、ライセンスが違えば バイナリが同じであっても別のソフトウェアと言えるかも知れない。が、ここでは そこまでは追求しない。

おなじソースコードから作成した A と B のバイナリがあったとする。そして A と B を作った人(団体)が違うとする。

A を作った人は A のみの責任を負う。B に対する責任を負ういわれはない。

    これは、常識として通用している。これを前提として オープンソースのビジネスが成り立っている。

おなじソースコードから作成しても別のソフトウェアであれば、改変したソースコードから作成したら当然別のソフトウェアであろう。

放置しないということは、別のソフトウェアを提供しなおすということで、コストがかかるということだ。装置することが許されていないとなると、別のソフトウェアの購入を強制することが出来るということであろうか?

たぶんそんなことは、ないのだろう。それはともかく、重大な問題があったソフトウェア と 置換されるべき 別のソフトウェア との関係はどのように定義されるのだろう?

    なんだが、グダグダな感じで終わらせてしまったので、補足。

    要するに、バイナリとなってリリースされるソフトウェアは、それで完結している。

    発禁にすることはできても、表現を変えて再提出せよと命令することは出来ないのではないか?

    そういう風にかんがえると、『重大なバグがあったらそのままの形で売り続けてはいけない。』ぐらいにしないといけないのではないか?

    『そのままの形』と書いたが、バグがあることを告知して、修正版があれば、それを入手する情報が添付されていれば良いのではないか? (リンク先が更新されるという前提で)リンク を貼っておくのでも良いかも知れない。

    有償のものは、そういう感じで良いと思うのだが、無償のものはそれでは困る。有償だと金銭の授受がある以上責任がある人(団体)がはっきりしている。無償だと、配布している人が存在しないかも知れない。あるいは、著作権が切れている状態かも知れない。あと、歴史的理由で実用としては配布していないかも知れない。

    無償だと免責だとか、ソースコードが添付されていれば、免責だとか。なにか配慮が欲しい。

    バグがあるという理由で、著作物を消滅させることにはなって欲しくないものだ。

こういうわけで、現時点では、具体的になにを意味するかわからないのだ。そうであれば、反対すろこともできない。私も慎重審議を求めることにしよう。

追記: 2011/06/17 本日 「ウイルス作成罪」(不正指令電磁的記録作成罪) が成立した。

毎日jpの記事 では、コンピューターウイルスを「意図に沿った動作をさせず、不正な指令を与える電磁的記録」などと定義。という説明になっている。誰もが『これはバグの定義では?』と思う内容だ。記者の無理解のためこういう説明になったのか? はたまた 本当なのか? 本当だとすれば、どうしてこうなったのだろう?

そもそも、コンピュータ・ウイルスとは、使用者の意思に関係なく 無限に感染していくようなもののことだ。コンピュータに依存している社会が危機にさらされるから、そういう性質のものを作ること自体が絶対悪である ... という風に私は理解している。

    無限に感染していく性質ならば、必ず自分自身をコピーする性質がある(実行形式の)プログラムのはずだ。それだけを問題にすれば良い。「記録を破壊した」とかは、別の犯罪だ。そういうプログラムをなんらかの方法で実行させれば良いわけで、コンピュータ・ウイルスでなくとも成り立つ。

    「記録を破壊するプログラム」をメールで大量に送ること ... これは犯罪だとは思うが、なんらかの形で騙して 損害を負わせるようなことだから 詐欺の類ではないのか?

    「記録を破壊するプログラム」が、自分自身を 勝手にメールで送る ような機能を合わせ持っていれば、これはコンピュータ・ウイルスだろう。

追記: 解説がいろいろ出てきた

    『無断で他人のコンピューターにおいて実行させる目的』で ウイルスを 「作成」「提供」「取得」「保管」すると 罪に問われる。そして、ここで言うウイルスは、バグがあるプログラムを含む定義。

    ということらしい。

    他人のコンピューターにおいて実行させるのに、普通は「無断」などあり得ない。騙されて実行してしまうのが普通。騙されて実行してしまうことも この法律に引っかかるのだろう。だが、「騙す目的での行為」 と 「作成、保管」とは 論理として つながらない。どのようにでも解釈されうるおそれがある。

      『無断で他人のコンピューターにおいて実行させる目的を持ったプログラム』の 「作成のみ」なら プログラムの動作で判断可能で、まだ理解できるのだが、そうは書いてない。まぁ「保管」が含まれると恐ろしいことになるから、そうは書けないのだろう。

      そういう理由もあって、このような表現をしているのだろうが、やってはいけないことの本質を捉えていないから、どのようにでも解釈される印象だ。

    本当に 「無断で実行させる」例として、OS の脆弱性をついてアタックをかけて 実行させる という手段がある。これを罪とするのは、正当だとは思うが、これだけが該当するような感じではない。そして、これは本当の意味のウイルスの特徴ではない。

    増殖するのがウイルスの特徴であって、「無断で実行させる」だけならば「増殖」しない。 「増殖するもの」に対して 軽い罪のように思われるし、「増殖しないもの」に対して 重い罪のような印象がある。なにより、解釈しだいというのが怖い。

「情報処理の高度化等に対処するための刑法等の一部を改正する法律」 を読んでみた。

    いまさらながら、条文を読んでみた。正直 リンクで紹介されないと読む気がしない。ようやくリンクを見かけたので、読むことにした。

      第百六十八条の二 正当な理由がないのに、人の電子計算機における実行の用に供する目的で、次に掲げる電磁的記録その他の記録を作成し、又は提供した者は、三年以下の懲役又は五十万円以下の罰金に処する。

      一 人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録

      二 前号に掲げるもののほか、同号の不正な指令を記述した電磁的記録その他の記録

    「作成」「提供」に関しては、どうもこれだけらしい。

    すなおに読むと...『正当な理由がない』 のにバグのあるプログラムを作成したり配布したらダメとしか読めない。

      『正当な理由がない』 -- 『興味本位』ってのは、『正当な理由』にはならないのだろう。趣味でプログラムを作るのに、『正当な理由』などあるのだろうか?

      『人の電子計算機における実行の用に供する目的』-- 実行させる目的 って何だ? そもそも プログラムを 配布するのは、実行させる目的のはず。ソースコードは、そのままでは実行できないが、実行させる目的 であるとは言える。ソースコードだけだからと言って 安心できない。

      ところで、AVR は、人の電子計算機に入るのだろうか? 入らないと判断できる記述ではないから入りそうな気がする。

      (一) は、やはりバグの定義にしか読めない。

    「取得」「保管」も同様で、『正当な理由がない』 のにバグのあるプログラムを「取得」「保管」してはならないという風に読める。

    「無断で実行させる」とかは解釈のひとつに過ぎないわけか。『正当な理由』だけが拠り所という感じ。悪意をもってと判断されば、なんでも罪に問える 内容に読める。

    悪評が高い 「不正アクセス禁止法」 でも、条文自体はちゃんと書いてあるように読める。それでも、『ACCS裁判』では、判事が内容を読み違えたと私は思っている。これはもっとひどい。条文を読んでも、どういう理由で、どういう行為が罪になるのかサッパリ分からない。いったい司法は、なにを基準に判断するのだろう?

      「不正アクセス禁止法」では、アクセス制御機能 = 鍵と理解すると 整合がとれた内容になっている。
      目的は、鍵による秩序の維持を図ること。
      (一) は、他人の鍵をつかうな。
      (二) は、鍵 を ピッキングで 開けようとするな。
      そして、(三)は 鍵 を 壊すな。

      バックドアは、 鍵がない入口があることを意味する。本来なら (三) かどうかは議論にすらならないはず。

      (補足) これは、私の個人的主張を平易に説明したもので、正確さにかける。だが、このように捉えないと 矛盾が生じる。そこまで分析はしたのだが、説明は困難なのでそこまでは踏み込まない。
      "鍵" という概念を導入して、それを保護することで秩序を守る という目的ならば、バックドアをも保護する のは "鍵" の存在意味がなくなるということで 論理が成り立たない。... 細かく分析すると、もっと出てくるのだが、これぐらいの説明で止めておく。


では、どういう内容なら良かったのか?

    たぶん 2 つの概念に分かれるのではないか

    ひとつは、『感染させるためのしくみ』を実際に行使する目的をもって作成するようなこと。

      『感染させるためのしくみ』とは、『計算機の使用者を騙してプログラムを実行させる』あるいは、OS の脆弱性を突くようなことをして、『計算機の使用者に無断でプログラムを実行させる』ようなもの。

      ここでは、プログラムがなにかということは問わない。そんなことをするのは、プログラムがなんであれ悪なのだ。

      だいたいプログラムを差し替えることは容易であり、犯行の直前まで安全なプログラムを実行するようにしているかも知れない。

      (追記)こうは書いてみたものの、『計算機の使用者を騙してプログラムを実行させる』ものには、メールの文面や Web サイトのリンクが含まれる。あまりに容易に作成できるから条件を変えるか、条件を増やさないとまずい。といっても、詐欺のようなものだし、実際に実行したら罪を問うことを否定はしない。

      ところで、 Web サイトに フラッシュ や java ,スクリプトが 含まれていたらどういう扱いになるのだろう? ほとんどの場合『計算機の使用者は意図』しておらず『無断で』動いている。java などは、『計算機で動作』はするが、計算機のファイルにアクセスできないようになっていて 『人の計算機で動作』とは定義されないようにしないとダメなのではないか?

    もうひとつは、本来の意味のウィルスの作成。

      本来の意味のウィルスは増殖することを特徴とするから、かならず自分自身をコピーする機能を持っている。そして、『計算機の使用者に無断で』自分自身のコピーを実行する

      『計算機の使用者に無断で自分自身をコピーする機能をもった』もの を 実際に行使する目的をもって作成するようなこと。

      このようなプログラムが 上記の機能と組み合わさると 他の計算機にも感染して爆発的に増殖することになる。だからといって組み合わせたものだけを罪とする必要はない。これだけでも危険なのだ。

      また、これと 上記のものとは、違う技術になる。どちらかの作成を専門とする場合もありそうだ。

    表現は吟味しないといけないのだろうが、どういう特徴をもったものがどういう理由でダメなのかをはっきり書けば良いのではないのだろうか?

    あと、例外として『正当な理由がある』場合はのぞくとなっていれば良いのだろう。どういうのものがダメか判断できれば『正当な理由がある』かどうかも判断できる。そして、『正当な理由』はまれだということになっていれば良い。できたら 『正当な理由の例』も条文にちゃんと書くべきだろう。
posted by すz at 10:10| Comment(1) | TrackBack(0) | 日記

2011年04月30日

気になる海外通販ショップ

dealextreme や taobao 以外で少々気になるところを紹介してみる。

goodluckbuy.com



以前 『wii 用 bluetooth モジュール』の記事で書いたのだが、妙に安い bluetoothモジュール を見つけた ショップ。

このショップは、電子部品も扱っていて。なかには妙に安いものがある。

たとえば ... これ 装置側の mini-B コネクタ。

秋月だと ヒロセ UX60A が、3 個 200 円 だが、これは 100 個入りで $3.6 ... なにかおかしいんじゃないか? とも思えるが べらぼうに安い。しっかりしたものを作るのには向いていないかも知れないが ちょっとしたものに使えるかも知れない。

    実は購入済みで、物も届いた。普通の mini-B にしか見えない。

価格を間違って付けたのかとも思ったが、他にも 100 個入りの USB関係コネクタが 多数ある。

あと ヒロセ DM3A-SF-PEJ が 10個 $5.45 とか。秋月では、DM3AT-SF-PEJ が 1個 140円だから やはり安い。

microSD/SD 関係だと他にも

が見つかった。

格安のものは、そんなに多くないようだが、掘り出しものが見つかるかも。

追記: 2011/08/28

www.pandawill.com



Android 関係が強いショップ。サポートフォーラムがしっかりしていて、印象が良い。

    以前ここ以外で買った Android マシンのファームウェアが ここのサポートフォーラムでしか見つけられなかったことがある。


Android 自体については言及しないが、そのアクセサリのカテゴリがなかなか。

修理用の LCD やタッチパネル。バッテリを扱っていたりする。

    あ、いま見たら値段が軒並み上がっている。

その中でも気になっているのは、EKEN シリーズ用の CPU ボード $21.99

WM8505 と DDR2(?) のボードで コネクタはたぶん メモリ用のものを使っている。たしか ARM 300MHz で Android 用としては 貧弱だが、電子工作で使う CPU としてみるなら超強力。2000 円ほどだから、使いこなせれば 面白いかも知れない。

残念ながら ARM は敬遠することにしているので、手は出さない。もしこういうので JZ4760 (MIPS 互換) が同じぐらいの値段で出たら 大人買いしてしまいそう。

追記:

久しぶりに覗いたら、
Original EKEN M009s CPU VIA WM8650』というのが $19.99 であった。

    (おまけ) 他のパーツだと、
  • Original RJ45 & USB Hub Adapter for EKEN VIA8650 Tablet PC M009S M010S M012S M013S M013F $3.99

    M001 とかで良くみた長いドングルのような形状ではなく、コンパクトで USB が両脇に出ている。
    M001 とかとも互換があるようにも思うが、リストには入っていない。

    コストダウンした結果、オプション扱いになる場合もあるそうなので、一応記す。

EKEN M001 とかと 互換性があったりするのだろうか?

ただ、Flash メモリの類が パターンだけなのが気になる。これだけでは動作しないのかも。

パターンは右上が SPI-Flash 。右下が 普通の NAND Flash 。それは良いのだが、NAND Flash の内側のパターンは何だろう? MicroSD にしか見えないのだが...。

http://ftp.gpl-devices.org/pub/vendors/Wondermedia/WM8650/

ここに WM8650 の Linux カーネルが。

KERNEL-DS_ANDROID_2.6.32_WM8650.110624.1626.tgz 04-Jul-2011 12:42 141M
[ ] WM8650_U-Boot_0.11.01_110726.tgz 26-Jul-2011 16:35 8.7M

ちょっとデカイような気がするが...

    ダウンロードして中を見てみたら、ビルドした状態のスナップショットだった。
    .config もそのままで、結構参考になる。

      CONFIG_USB_GADGET=y
      CONFIG_USB_FILE_STORAGE=m
      CONFIG_USB_FILE_STORAGE_TEST=y

      CONFIG_USB_ANDROID=m
      # CONFIG_USB_ANDROID_ACM is not set
      CONFIG_USB_ANDROID_ADB=y

    USB GADGET 周りは、こんなだった。

    あれ?と思ったのは、自動的に複合デバイスになるのだろうか? ということ。SmartQ では排他で使っていたけれど、そんな必要なかったのか。

    (追記 2011/08/21) EKEN 本体
    このボードを買ったとしても配線を調べたりするには、本体はどうしても必要。

    everbuying.com だと EKEN M009 (おそらく M009S) が、

    この値段だった。8/20 現在 PayPal のレートが 78.48 だから 6400円。国内でも 7000円ぐらいからあるから 格安まではいかない。

    • 買ってみた。BogoMips は、約 800 -- 600 MHz だとばかり思っていたので、ちょっと驚いた。 ただ、Cortex-A8/A9 は、2次キャッシュがあるから M009F(S5PV210 1GHz) なんかと比べると大分負けるかも。

    pandawill.com は重くて見てなかったのだが、よくよく見れば

    この値段で本体が買えるわけだ。CPU ボードとしては興味深いのだが、液晶付けて ... みたいなことを考えだすと 本体買った方が結局安い。

      ジャンクを買っても CPU ボードは手に入るわけだし、なにか液晶なしで有用に使えるものが作れると...面白いかも。

      あと、1G Hz CPU (CPU:Samsung S5PV210 Cortex-A8) の EKEN M009F ($88.99 ) がある。おそらく CPU ボードのコネクタには互換性があるはず。

      ちなみに、本体のインターフェイスの出力があるはずだから、10/100T Ethernet , Sound , USB (Wifi 用 + 拡張コネクタ用 x2 ?) , Gセンサ用 I2C (or SPI) , ボタン用 GPIO , LCD Display 用出力、カメラインターフェイス -- とこれだけ出ているはず。

      ただ、これだけ出ていても、本体にインターフェイスが付いているわけだから 開発するには本体をそのまま使った方が手間がない。

    ところで、WM8650 の Product Brief が ここにあった。スペックが書いてあるだけだが、

    • ARMvrTEJ 600 MHz
    • uDSP 400 MHz (H.264 480p まで)
    • USB host/device Port x 4
    • Ethernet 10/100T Mac
    • Boot from SPI Flash

    だそうだ。SPI Flash のパターンが載っているのは、そういうことだったのか。SPI Flash にブートローダを置けば、後はどこからでもブートできる。もし、JTAG ポートが出ていて BSDL ファイルが手に入れば、JTAG 経由で SPI Flash を書き換えられるかも。

      ところで、このボード パターンだけで NAND FLASH も SPI FLASH も載っていない。これは、自分で付けるものなのか? と思ったのだが、分解写真を探したら、マザーボードの方に NAND FLASH が載っていた。SPI FLASH らしきものも マザーに付いている。交換用部品だから ハンダづけしないといけないのはたしかに変。ただそうなると、空きパターンの意味は? ここに 部品を実装するとどうなるのだろう?

posted by すz at 02:49| Comment(2) | TrackBack(0) | 日記

2011年04月08日

Digikeyで買い物(2011-4)

久しぶりに Digikey を覗いたら XMEGA192A3 があった。嬉々として購入することにした。

    mouser ではだいぶ前から扱っていたのだが、ERR マークがついて手続きがよくわからないので敬遠していた。

    Digikey ではずっと売ってなくて ピン互換の XMEGA192D3 しかなかった。しょうがないので一応押さえたのだが、機能が低すぎて 面白くないので ライタソフト開発用に 1つだけ組んで放置している。

    2011/4 現在の価格は、192A3 が 1,054円。192D3 は 806 円で 200円 安いのだが、DMA , DAC がないし、 ADC は 周波数/チャネル数とも大幅ダウン。

今は FPGA のほうが面白いので放置しそうだが、一応 5 個押さえることにした。

7500円以上にするために、もう少しなにか買わないといけない。FPGA の Spartan-6 XC6SLX9-2TQG144を 2 つばかり買うことにした。

    FPGA は、Spartan-3A TQG100 の 50A と 200A を購入済み。基板も設計したものが手元にあるが、動かす中身を作っている最中で組み立てていない。

    JTAG 関係もオリジナルでやるつもりだから、その後ツールを作ってようやく 組み立てる予定。で、経験を積んだ後に Spartan-6 LX9 -- なんだが随分後の話だが、手元にあって初めて作る気になるのだからしょうがない。

書い忘れたもの。

-- 実はこちらが主題。買っておきたいものはあったのに LSI を 2 種買っただけで発注してしまった。今度は忘れないように メモしておく。

  • 3軸加速度センサ MMA7455

    Microtouch』の記事でメモったにもかかわらず買い忘れた。

    1 個 185円 だが、いま見たら在庫なし。在庫がないもの 1 種類と 在庫があるもの の組み合わせは、両方とも 送料無料で送ってくる。

    だから、こういうついでのときは、在庫がないものを買うチャンスなのだ。

  • 電源系 の部品

    FPGA とか CPLD は、1.2V や 1.8V が必要。いつもチップを買うときに 電源系の部品も一緒に発注することにしていたのだが、今回忘れた。

    SC189CB2518 (1.0uH) は 前回の Spartan-3 購入の際に買ってあるから、ただちに困ることはないのだが、今回気にもかけなかった。反省しよう。特に 1.2V の SC189 は手持ちが少ない。次回は忘れないようにしたい。

その他、おすすめのパーツ

  • 74LVC4066D

    LVC シリーズのアナログスイッチ。抵抗値が小さい。

    XMEGA の基板を作ったとき、これも入手難だったが、今は普通に在庫している。

  • ATtiny4313

    DIP ではないが、SOIC が単価 246 円で在庫している。

    ATtiny20/ATtiny40 は リストは出るが 在庫はなく 1個単位はまだ買えない。

おまけ: FPGA メーカの選択基準

    実をいうと、論理合成ツールがばかでかくて、SSD のノートPC では 1つをインストールするのがやっと。だから 1 社しか選ばない事情がある。

    で、デジキーで扱っているのは Xilinx のみ。選択の余地がない。

    調べてみると Lattice の MachXO2 というのが、良さそう で使ってみたい気がするが ... デバイス自体も買えないし、当面パス。

    • MachXO2 ファミリ・データシート (pdf)

      ちょっと見てみた。ブロック RAM がある TQFP 100 が 640/1200/2000 で、TQFP 144 だと 640U/2000/4000/7000 か。種類が多いのがいいなぁ。ハードマクロは、I2C x 2 , SPI , タイマ。やっぱりいずれは使ってみたい。

追記: 2011/06/17

  • LCMXO2280C-B-EVN Lattice の MachXO Breakout Board 2700 円 (購入済み)

    FT2232HL と MachXO2280 が載ったボード。7.6 cm x 7.6 cm ぐらいのサイズ。

  • AT93C46DN , AT93C46EN SOIC の EEPROM 。FT2232 用。

    安いし、次の購入時にでも、買っておこう。

  • LCMXO2-1200HC 662円〜 851円。

    欲しいが、まだいいや。LCMXO2-1200ZE-P-EVN (MachXO2 Pico Dev Kit) は、欲しいがまだ売っていない。

  • MI0603J600R

    チップフェライトビーズ。60Ω@100MHz 。いろんな USB 関係の回路図で VBUS から 電源を取る場合に チップフェライトビーズを通している。 このチップは、Lattice の USB JTAG (FT2232HL) の回路図で使っていた。

    秋月に BLM18PG600SN1D (1608, 60Ω@100MHz, 25個100円) があるので、ここで買う必要はない。ついでに買うなら ... という感じ。

    ちなみに、Lattice の回路図では、シールド GND も GND に 直結していなくて 100KΩ + 0.01uF を通して GND に 接続していた。... そうか

  • ASV-24.000MHZ 24 MHz のオシレータ (3.3V)。166円。

    購入するついでに 1-2個 買っておきたい。24 Mhz と DCM を組み合わせると いろいろな周波数が作れて便利そうな .. 。

  • UM232H



    FTDI 純正の モジュール (1801円) なんてのも出ている。(データシート)

    FT232H(Hi-Speed 対応のシングルチャネル)採用。 -- MPSSE も搭載。JTAG 用に 欲しいかも。

  • FT232HL

    チップ単体だと 383円。LQFP48 pin だし、コンパクトで安くて良いかも。2232D と同じ 48pin だが、ピン配置の互換性はない。水晶は 12MHz 。

  • 93LC56BT

    UM232H は、SOT-23-6 の 93LC56 を使っている。93C46 より 93LC56BT の方が良さそう。

    ところで FT232H (と FT2232H) では、MPSSE は Bitbang モードと同様に アプリで設定可能になっている。ピンの初期状態の問題がなければ、EEPROM は必ずしも必要ない。

      補足: EEPROM なしだと デフォルトは Serial になってしまう。そうすると RTS と DO が両方出力でぶつかることになる。どうせ JTAG にしか使わないのであれば、EEPROM を付け 設定するのが正しいのだろう。


  • NX3225SA

    表面実装型の水晶で、秋月で扱っている FA238 (3225サイズ) に置き換えられるのは、これ ... なのか?

    12 MHz が欲しいが、95 円もする。秋月の FA238 は、16/20/25 MHz のみだし、仕方がないか。

    .. ただ、ハンダ付けで一番苦労するのは、いつもこの水晶。ちょっと悩む。

  • NX5032GA 2pin SMD で安いというと こういうやつ。 73 円だし特に安いわけではないが、ハンダ付けが楽そう。ラジアルタイプは安いが、安っぽい感じがして嫌。固定する方法も悩む。

  • MCR10(12K)

    FT232H の回路図みてたら 1% 誤差指定の 12KΩが必要。買い忘れないように。

追記: 2012/09/19 繰越分の話

    コメントに出ていた話。いまさらだが.. 思い出したので。

      ダブル

      在庫量の不足により、ご発注分の一部が繰越注文となる場合、在庫のある分が先に出荷され、繰越注文分は在庫の補充を待って出荷されるか、繰越注文の保留期間の期限が切れるまで保留されます。尚、運送料(商品代金によっては無料)は、一回分のみになります。

      シングル

      繰越注文分の在庫の補充を待って、一度に出荷されるか、繰越注文の保留期間の期限が切れるまで保留されます。尚、運送料(商品代金によっては無料)は、一回分のみになります。

    在庫がないものは、『繰越注文分は在庫の補充を待って』ということだから、全部揃うまで保留ということ。送料は、一回分のみで、7500 円以上なら、この 2 回分が無料ということ。

    ちなみに、Mouser では、

      その他のほとんどの国への発送で、ご注文を複数に分けて発送しなければならない場合は、発送量が割引されます。

    ということなので、Digikey は 在庫なしのものも気軽に発注できるメリットがある。ただし、商品の価格は Mouser の方が安い傾向があるように思える。
posted by すz at 22:00| Comment(4) | TrackBack(0) | 日記

2011年02月03日

AVR Toolchain

Tiny20/Tiny40 の記事を書いたときに AVR Toolchain というのが出てきて、なにこれ?状態だったのだが... 実は WinAVR の開発は終了して AVR Toolchain に引き継がれたらしい。いまさらながら知った。どおりで 新しい WinAVRが出ないはずだ。

正規の AVR Toolchain は、Atmel のサイトで レジストすれば AVRStudio 4 の addon として手に入る。

だが、AVRStudio 4 は使っていないし、WinAVR 相当だけが欲しい。 そして それを手にするのにレジストするなど論外。.. どうしたら良いのだろう?

とりあえず、レジストなしで入手できる、AVR Tools Beta Site に行ってみると、AVR32 Studio 2.7 (Windows 版と Linux 版がある) の zip がダウンロードできた。

    300MB 前後のサイズだが、それらしいものは、これしかない。

    中をみてみると (AVR32 ではなく) AVR の gcc (avr-gcc.exe )などがあった。どうも WinAVR 相当がまるごと入っているかんじで avr32-gcc.exe と avr-gcc.exe が ひとつの Tree に入っている。

    WinAVR 相当を抜き出して zip で固めると 85MB 程度になって、正規の AVR Toolchain と同じぐらいのサイズになる。さらに、avr32 関係と doc/info/man とか削ってみたら zip で 30MB 程度になった。

    これぐらいなら、インストールしても良いかなと思い、展開して PATH を通してみた。

    で、ビルドしてみると一応使える。gcc のバージョンは 4.4.3 。ビルドしたバイナリのサイズは WinAVR-20100110 より少し大きくなるようだ。

これで、使えるものは入手できることが分かった。

  • ただ、ベータ版で、最新の 1つの バージョンしか入手できないような.. 正規版(相当)か 特定のバージョン(の zip 版)を入手するのはどうしたら良いのだろう?
  • あと toolchain のソースコードの入手方法もまだ分かっていない。バイナリよりむしろこっちの方が欲しい。(WinAVR だとパッチ一式が一緒に入っていて 便利だったのに これにはパッチ集は入っていない。)
  • だいぶ不便になった印象。ただ Linux 版が手に入ることは良いことだ。あまり考えなくとも 使えるし同じバイナリが生成できる。

とりあえず、事情がわかるようになるまで、取ってきた次のバージョン

  • AVR32 Studio 2.7.0.851 (Toolchain 3.1.0.201012011657)
  • avr-gcc -v では、gcc version 4.4.3 (AVR_8_bit_GNU_Toolchain_3.1.0_200)

を試しに使ってみようかと思う。

リリースするバイナリでは、WinAVR-20100110 を 使うが、Tiny10 を使ってみるとか Xmega を使ってみるとかするときに必要だ。特に興味があるのは、Tiny10 だったりする。FPGA で遊ぶときに これに準拠して小さなコアにしたい。

    追記 2011/03/02: 3.1.0_200 を Tiny10 で試してみたが、使えるレベルになっていないことが判った。そして それ以降のバージョンは現在公開されていない。待つしかないようだ。

    追記 2011/03/08: AVR Studio 5 beta が出ている(523MB: サイズ注意)。

    これをインストールすると、AVR Toolchain もインストールされる。入っているのを見てみると

    gcc version 4.5.1 (AVR_8_bit_GNU_Toolchain_3.2.0_253)

    になっている。これだけを 取り出して MSYS のコマンドラインで使ってみたのだが、少々具合が悪い。-lgcc が見つけられなくてエラーになる。しょうがないので gcc フロントエンドだけ 3.1.0 (200) の avr-gcc を使っている。
    ( lib/gcc/avr/4.5.1 とlibexec/gcc/avr/4.5.1 を 4.4.3 に rename する。こと)

    で、tiny40 を試してみたが、まだだめ。32bit の LDS/STS は使わなくなったが、string など初期値付きデータが FLASH から RAM にコピーされないようだ。

    0 で初期化されたデータがあれば、<__do_clear_bss> が call されるが、0 以外で初期化すると なにも call されなくなる。この問題は、自分で初期化すれば良さそうなのだが、今度は 32bit の STSが使われる。当面グローバル変数は使えなさそう。

    無理やりでも使いたいのであれば、auto 変数を使い。初期値は、コードで代入するという手を使う。それ以外に、妙にコード効率が悪いという問題がある。int8_t で指定しているのに 16bit 演算しているとか ... 。

    追記: 2011/03/17:

    http://distribute.atmel.no/tools/opensource/avr-gcc/

    パッチはここ?

Tiny10 系について:

Tiny10 では、レジスタが r16-r31 の 16個しかない。 AT90S1200 や XMEGA を含む数あるAVRのなかで、このシリーズだけ違うのである。そして、Atmel は頑張って gcc をこれにも対応させた。AVR Toolchain が動くようなので、どうやって少ないレジスタに対応したのかチェックしてみようと思う。

    参考リンク : アセンブラ関数の書き方(avr-gcc)

  • レジスタ:

    普通のAVRでは、いくつか特定の役割を持ったものがある。

      r31:r30 Z レジスタ
      r29:r28 Y レジスタ (フレームポインタ)
      r27:r26 X レジスタ
      r1 tmp
      r0 zero

    X/Y/Z レジスタは ポインタとして(も?)使われる。r1 は、LPM 系, MUL 系の命令で使われる。r0 は、C では常に 0 を入れておくルール。

    tiny10 では、r1 は存在しないが、LPM 系, MUL 系の命令もまた存在しないから無問題。r0 も 存在しないが、ないなら使わないで済ませば良い話のようだ。

  • 引数:

      r25:r24 第一引数
      r23:r22 第二引数
      r21:r20 第三引数
      r19:r18 第四引数

    普通のAVRでは、4 つまでの引数がレジスタ渡しになる。それ以上はメモリに置き、Y レジスタ(フレームポインタ)を使いアクセスする。なお、8bit の場合でも詰めることはしないで 16bit レジスタのように使っている。

    tiny10 では、3 つまでに変わった。

    追記: 普通のAVR で 4 つまでと書いたが、間違い。r25:r24 まで続くようだ。

  • 戻り値

      8bit r24
      16bit r25:r24
      32bit r25:r24:r23:r22

    引数に使ったレジスタを戻り値に使っている。これは、tiny10 でも変わらない。

  • call される側が値を保証するレジスタ

      r29:r28 Y レジスタ
      r17 - r2
      r0 (0 を設定)


    普通のAVR では、こうなっていて 使用する場合は push し pop で値を戻す。

    tiny10 は、調査中だが、

      r29:r28 Y レジスタ
      r17 - r16

    こうなっている。

    ところで、r1 (__zero_reg__) / r0(__temp_reg__) はどうしているのか?

      gcc のコード生成を見て分かったのだが、必要なのである。過去のAVR のコード生成に影響を与えずに改造しなくてはならないので、基本的な考えを変更するわけにはいかないのだ。

      で、どういうわけか、r17 , r16 を割り当てている。セーブ不要のレジスタにすべきではないか? 幸い引数を 3 つまでにしたので、r19/r18 はこの目的に使えるはずだ。


  • その他 Tiny10 が違う点

    命令セットやレジスタとは関係ないのだが、gcc に関係しそうなところで Tiny10 が違うところがある。

    Tiny10 では LPM 命令がないが、フラッシュ全体が 通常メモリと同じようにアクセスできる。ただし、アドレスはずれていて 0x4000 から フラッシュが始まる。

    これ gcc ではどう扱っているのか 要調査。

    ついでに書いておくと メモリ(RAM)のアクセスが遅いらしい。2 clock に 1 回アクセスとか。アドレス空間に フラッシュとか いろいろ 入ったせい?

  • avrXX

    普通 avr3 とか avr5 とか CPU の種類によってカテゴライズし、libgcc.a を切り分けている。

      (avr2) avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6

      XMEGA 以外でも 従来のものは、これだけある。 アドレススペース x tiny/mega で分類されていたと思う。ちなみに at90s2313 などは avr2 で ディレクトリがなく、直下の libgcc.a を使う。

    tiny10 は、avrtiny10 になっている。avr0 とかするのかと思ったのだが、安易なネーミングだった。ちなみに、tiny20/tiny40 も avrtiny10 を使う。

    ついでに書くと XMEGA は、avrxmega2,4,5,6,7 と大幅に増えている。なにやら大変なことになっているようだ。

    リストするとこう。

    mmcu=atxmega16a4 mmcu=avrxmega2;
    mmcu=atxmega16d4 mmcu=avrxmega2;
    mmcu=atxmega16x1 mmcu=avrxmega2;
    mmcu=atxmega32d4 mmcu=avrxmega2;
    mmcu=atxmega32a4 mmcu=avrxmega2;
    mmcu=atxmega32x1 mmcu=avrxmega2;
    mmcu=atxmega64a3 mmcu=avrxmega4;
    mmcu=atxmega64d3 mmcu=avrxmega4;
    mmcu=atxmega64a1 mmcu=avrxmega5;
    mmcu=atxmega64a1u mmcu=avrxmega5;
    mmcu=atxmega128a3 mmcu=avrxmega6;
    mmcu=atxmega128b1 mmcu=avrxmega6;
    mmcu=atxmega128d3 mmcu=avrxmega6;
    mmcu=atxmega192a3 mmcu=avrxmega6;
    mmcu=atxmega192d3 mmcu=avrxmega6;
    mmcu=atxmega256a3 mmcu=avrxmega6;
    mmcu=atxmega256a3b mmcu=avrxmega6;
    mmcu=atxmega256d3 mmcu=avrxmega6;
    mmcu=atxmega128a1 mmcu=avrxmega7;
    mmcu=atxmega128a1u mmcu=avrxmega7;

    基本的に アドレススペースの関係で、分類されているようだ。A1U とか X1 , B1 とか知らないものがあるが、いずれ世に出るのだろう。


追記: Tiny40 の I/Oレジスタマップ

ここに書くのもどうかと思うが、FPGA で遊ぶ準備として Tiny40 のレジスタを調べてみた。ADCとか NVM とか FPGA から見て関係ない物は除外してある。

なぜ Tiny40 ? かというと (1)ピンの数が多く PORT が多く割り当てられている。(2)SPI/TWI がある。
これから不要なものを取って USART 追加すれば、だいたい欲しいものになる。

ステータスレジスタ, スタックポインタ 以外は基本的にどこになにをマップしても良いのだろうけれど、全然違うとやはり AVR らしくなくなる。合わせられるものなら合わせた方が無難だろう。


    0x3F SREG ---- ステータスレジスタ(必須)
    0x3E SPH +--- スタックポインタ(必須)
    0x3D SPL +
    0x3C CCP ---- レジスタ書き換え保護

    0x3A MCUCR ----
    0x39 OSCCAL +--- クロック関係
    0x38 reserved :
    0x37 CLKMSR :
    0x36 CLKPSR +
    (0x35 - 0x32)
    0x31 WDTCSR ---- ウォッチドックタイマ

    0x30 SPCR +--- SPI
    0x2F SPSR |
    0x2E SPDR +

    0x2D TWSCRA +--- TWI
    0x2C TWSCRB |
    0x2B TWSSRA |
    0x2A TWSA |
    0x29 TWSAM |
    0x28 TWSD +

    0x27 TCNT1H +--- タイマカウンタ1 (16bit)
    0x26 TIMSK :
    0x25 TIFR :
    0x24 TCCR1A |
    0x23 TCNT1L |
    0x22 OCR1A |
    0x21 OCR1B +

    0x20 RAMAR
    0x19 RAMDR

    0x1E PUEC +--- ポートC
    0x1D PORTC |
    0x1C DDRC |
    0x1B PINC +

    0x1A PCMSK2

    0x19 TCCR0A +---- タイマカウンタ0 (8bit)
    0x18 TCCR0B |
    0x17 TCNT0 |
    0x16 OCR0A |
    0x15 OCR0B +
    ( 0x14 - 0x0D )
    0x0C GIMSK
    0x0A PCMSK1
    0x09 PCMSK0
    ( 0x08 )

    0x07 PUEB +--- ポートB
    0x06 PORTB |
    0x05 DDRB |
    0x04 PINB +

    0x03 PUEA +--- ポートA
    0x02 PORTA |
    0x01 DDRA |
    0x00 PINA +

    USART レジスタ ( 0x14 - 0x0D に入るか) 
    +0x6 UDR1
    +0x5 UBRR1H
    +0x4 UBRR1L
    +0x3 UCSR1D (optional)
    +0x2 UCSR1C
    +0x1 UCSR1B
    +0x0 UCSR1A


    並べてみて気になったのは、

  • CCP というのは、4 クロック以内の書き込まないとダメという機能を一ヶ所にしたもの。

  • CLKMSR は、クロックソースを切り替えるもの。

  • PORT に PUE というのが追加されていること。これは プルアップ許可機能が DDR から独立。
    .. こうなっていると、PORT を 0 にして DDR 操作で I2C のような操作がでできる。

  • RAMAR/RAMDR とは何? なぜ必要?


追記: 2011/10/13 -- このページを見ている人がいるようなので

  • AVR互換コア(テスト3)

    その後、tiny10 系 と 互換のコア(FPGA 用 IP)を実際に作っている。テストも出来ないので、AVR_Toolchain は、独自に 修正することにした。その暫定結果が、上の記事。

  • AVR_Toolchain-20110424-src.tar.gz

    これが、ソースへのパッチ集。

  • binutils も 1 バイト LDS/STS に対応するために修正が必要。
  • __tmp_reg__ , __zero_reg__ は r18/r19 に define している。これは重大な修正だが、こうしないと libgcc の 関数で対応できないものが出る。
  • avr-libc は、ほとんど対応できていない。アセンブラが多すぎて対応しきれないのだ。

    4/24 で止まっているが、その後 AVRStudio 5 が出ている。ソースがどうなったかチェックはしていない。
  • posted by すz at 03:53| Comment(0) | TrackBack(0) | 日記

    2011年02月02日

    12VLED基板

    今基板を作っているのだが、ついでに 12V の LED 基板も割りつけて作ることにした。

    重いものばかりだと 作るのが気楽にできないので、箸休め的にお気楽なものを混ぜようというのが意図。

    まずは、手持ちの 12V 基板の紹介。



    dealextreme でこんなのを買っている。(画像にリンク)。値段も $2.2 / $2.8 / $3.0 でかなり安い。

    左は 5mm の白色 LED を 21 個載せたもの。右2つは 同じ基板を使っていて、真ん中が白色、右が ウォームホワイト。LED は 24 個だが、左のよりかなり小さい。

    また、右端の ウォームホワイト以外は逆指し OK 。

      一番安い左のやつが一番明るいようだ... ただ、使っているうちに切れた。... これは三端子のダイオード(x2 入り) のハンダづけ不良だった。ハンダを付け直すことで直せた。

      LED は 5mm タイプだが、レンズ部分が短くて背が低いタイプ。一応白く光る。青みはあまり感じない。

      真ん中と(右の)ウォームホワイトは同じ基板を使っているが、ウォームホワイトはブリッジダイオードを使わずにジャンパで済ませている。--- Vf が高いせいだろう。

      ウォームホワイトは全体的に暗いだけでなく 明るさにむらがある。 あと、LED のはんだづけ不良で 付かなくなるのが出た。

      真ん中は白く光る。これも明るくない。直視してもあまりまぶしくない。

      右2 つが暗いのは、車のバッテリー駆動を想定しているからだろう。電流制限抵抗は、両方とも 3 直列にそれぞれ、240 Ω (24LED だから 8 個付いている) 。12V 安定化電源では、150 Ωに付け替えるか、300 Ωを並列に付けると良いかも。

      左の安いほうは、21LED なのに抵抗が 4 つ。ちゃんと調べていないが全部並列のような ... 。たまたま Vf が揃っているようで 明るさにムラはないようだ。12V で十分明るいようで、たぶん車でつかうには 向いていない。


    こういうのを持っているわけだが、ちょっと自分で作ってみたい。ユニバーサル基板でも同等のものは作れるわけだが、出来上がりが美しくない。プリント基板ならハンダづけも気楽にできて楽しいような気がする。

    ちなみに LED も dealextreme の これ 25個 $2.6 を入手済み。安いやつでも沢山載せれば明るいはず。あと、ついでに チップ LED も載るようにしようと思う。



    こんな感じか。トランジスタ 2 個による 定電流回路組み込んでみた。PWM による 制御も可能。いまのところ どちらか選択することを考えているが、抵抗値の選択がうまく出来れば 両立できるかも知れない。

    チップLED は、最初 秋月で扱っている 白色チップLED -- PLCC2 パッケージをターゲットにしてみたが、115個入りジャンクLED基板も買っていたのだった。これを付けるために、K を短めにしている。(4 端子で A A A K の割り当てなので、最初のアートワークでは付かなかった)



    回路図は、こんな風にしている。

      PWM との両立は、普通にできそう。Q2 の方は 電流がほとんど流れないので、R9 : 電流検出側のベース抵抗を大きくできる。で、R10 : PWM 側の抵抗の値を一桁小さな値にすれば大丈夫。10K : 1K でいけそう。

      標準的な設定だと 20mA x 3V x 12 ぐらいで 0.72 W (消費電力は、0.96 W) 。寿命を犠牲にすれば、もうすこし電流を流せるし、PWM 使ってのパルスなら 3 倍ぐらいは OK 。

      そのあたりを考慮して、手持ちの抵抗値とも相談して、電流制限抵抗は 47 Ωにした。

      Vf が 3.1V x 3 だとして トランジスタで 0.2V 下がるとすれば 2.5V 。電流検出用抵抗が 8 Ω/4 とすれば、常時 ON で、一個あたり 50 mA 。すぐさま壊れる電流値ではなさそうだし、PWM で使うなら妥当なところだろう。

      PWM を使わないなら電流制限が効く。この場合気にしないといけないのは、トランジスタの熱容量。
      20mA で制限するなら、抵抗で落ちる電圧は、0.98V 。そうすると トランジスタで 1.72V 落とすことになる。流す電流は 80mA だから 137mW 。放熱は気にしないといけないが、大丈夫か?。

      -- 2SC2712 だとコレクタ損失 150mW でぎりぎり。 2SC3325 なら 200mW で少し余裕がある。また、制限電流はあまり上げられない。3325 使って 30mA といったところか。

      電流検出用抵抗は、7.5 Ω。-- 80mA で 0.6V になるようにするわけだ。だが、 7.5 Ωは手持ちにない。10 Ω + 47 Ωだと 8.2 Ωで明るめになる。さらに 75 Ωを追加すると 7.4 Ω。 電流検出抵抗がパラレルになっているのは この調整をするため。

      ちなみに、上記は車のバッテリーで点灯させることを想定していない。20mA で電流制限するなら、3325 使った上で 電流制限抵抗を 75 Ω 以上にしないといけない。
    posted by すz at 20:45| Comment(0) | TrackBack(0) | 日記

    Microtouch

    つれづれ日記』で知ったのだが、『Microtouch - a handheld AVR touch screen demo board』は、なかなか興味深い。

    mega32u4 に 2.8 inch タッチパネル LCD を 接続したボードで、ファームウェアもオリジナルのものを頑張って作っている。タッチバネルは専用IC を使わずに自力で読み取っている -- これだけでも参考になる。あと、バッテリー駆動で USB で充電でき USB で接続して通信もできる。 MicroSD や 3軸加速度センサーも付いていてなかなか気合が入っている。

    基板サイズは 50mm x 45mm -- 液晶より小さい。



    ガーバーデータのツール』に画像生成機能を追加したのでテストを兼ねて画像化してみるとこんな感じ。

      だいたい合っているが ISP コネクタの Octagon が変。-- そういえば Octagon 使ったことがないや。
      → 画像は修正できた。(参考用旧画像)
      特に円と細い線が汚いので、描画系みなおし。(参考用旧画像)

    前記事でも書いたように今基板を作ろうとしているので、一緒に割付け(自分で切るので面付けと言えない)して作ろうかと思った。

    ちょっとストックしているパーツと相談しながら検討してみた。ーー結構なじみがないパーツを使っている。以下メモ

    • LCD

      1mm ピッチ 37 pin タイプ 2.8inch のがぴったり合った。OK 。ただし信号線は未チェック。

    • LP2985 3.3v LDO :

      これは、TAR5SB33 と置き換えたい。その場合、BP のところにコンデンサが必要。ただ、コンデンサを入れるスペースがない。

    • 16 MHz 水晶 / MicroSD:

      いつものやつ(FA238 / ヒロセ DM3AT)に置き換える。MicroSDまわりはちょっと変えないといけない。

    • USB/リセットスイッチ

      いつものやつが付きそうな気がするが、要チェック。厳密なチェックは面倒だから置き換え?

      USB は、位置決めボス付きが付くようになっている。ヒロセ UX60A-MB-5ST も、合うようだ。リセットスイッチも いつものやつが合うことは合う。ただし、向きを間違うと まずい。対角だけ接続すれば、向きを気にしなくて良いのだが ...

    • パワーボタン

      表面実装の横押しタイプ! ジャンクになった基板を持っているので、外せばパーツはなんとかなりそう。だが、一般的な部品で代替もできるようにすべきだろう。

      で、一般的な部品とは何だろう? Omron の タクトスイッチの pdf には、標準の 6mm のもので横押しタイプが載っている。どこやらで売っているのを見たこともある。これに対応しておけば、普通のタクトスイッチを 無理やり付けることは可能だろう。ただ、7.4mm も 高さがあり一番背の高い部品になりそうだ。

      実は、この基板と 液晶でバッテリーをサンドイッチする構造になっている。だから 下側に 3 mm 程はみ出しても問題ない。普通のタクトスイッチで基板を挟むようにマウントするのが良いのかも。

      あるいは、リセットスイッチのように 面実装にする。ケースにいれたとして、裏面にはなにもないのだから、押しこむような形の電源ボタンでも問題ないように思える。

      ケースの話が出たのでついでに書いておくと、やはり RFAD の MK8060 が良いのではないかと思う。ガラス窓と液晶がだいたい同じサイズ。ただ、ちょっと厚いので不恰好になるかも知れない。

        薄いケースに改造するのは手間だが可能のような気がする。下部ケースの嵌め合わせるところ -- 1mm 程の段になっているわけだが、これをのこぎりとかで削っていけば良い。もとは 20mm 厚だが 5mm ほど削って 15mm にすれば 良い感じになるのではないだろうか?

        あるいは、上部ケースどうしをニコイチ。つなぐ部分は板を貼り付ける。これだと単純に 削っていって好きな厚さにできる。底面になる方には好きな板をいれればよい。

    • リポ電池コネクタ。

      この形状のものは持っていない。ピンヘッダ用のスルーホールに変えたいところ。

    • MCP73811/2

      いつものやつは、MCP73831 。STAT が CE に変わっているので 無接続にしないとまずい。

      あと、充電中は電源からバイパスする回路を追加すべきだろう。.. だが、スペースがない。電源周りだけがごちゃごちゃしている。リセットボタンを右上あたりに移動して、スペースを空けたほうが良いかもしれない。



        具体的に回路図を書くとこう。D1 は逆流防止と 電圧をわざと下げて MCP73831 の負担を減らす目的で入れる。PCH MOSFET は、バッテリーからの電流供給。外部電源があると OFF なのでダイオードが入っているのと同じで逆流を防止する。外部電源をはずすと ON になり低抵抗で接続。この回路がなくとも、動くことは動く。でも、そうすると充電の制御が狂うから良くないらしい。

        あと入力側の コンデンサは 10u が基本らしい。これより大きいのはダメで、小さくするのも推奨されないようだ。バッテリー側のコンデンサも 10u で バッテリーが外れたときのために必要らしい。

    • 3軸加速度センサ MMA7455

      これはどうするのが良いのだろう?

      デジキーで結構安く手に入る。1 個 183円。次回発注時にでも買うことにして、そのままにしよう。

    • 抵抗やコンデンサ

      合うのかどうか要チェック。2012/1608 兼用でないと困る。

      サイズは OK -- いつも使っているパターンよりも 広い。

    この基板は 50mm x 45mm で そのまま Fusion PCB に発注可能なようだ。だが、そうすると部品の入手が結構面倒なことになる。

    中途半端に手をいれるより、いっそのことディメンジョンだけ合わせた互換ボードにした方が良いようなきがしてきた。今回の基板に入れるのは、パスして 別途考えることにしよう。

    .. というわけで、メモだけ残しておく。
    posted by すz at 20:17| Comment(2) | TrackBack(0) | 日記

    2011年01月11日

    Tiny20/Tiny40

    Atmel のサイトを見ていたら Tiny20/Tiny40 というのがあるのに気がついた。Tiny10 の仲間かと思ってデータシートをダウンロードしてみたら 全然違った。

    TPI があるから 仲間ではあるが、Tiny20 は 14 pin で、Tiny44A とかと互換性があるピンアサイン。Tiny40 は 20 pin で 他とは互換性がない。

    で、両方とも SPI と TWI が付いている。なにかスレーブ・コントローラに徹した感じがする。

    そんなことより Tiny20/Tiny40 は命令が 54 しかない。Tiny10 ですら 112 命令 あるというのに。(普通 Tiny は 123 - 125 命令)

    • いまさら命令を大幅に減らすとは、なかなか興味ぶかい。どの命令を減らしたのか? なぜそれで問題ないのか? について 分かったことがあったらここに追記していこうと想う。

    • 一番興味があるのは なぜそうしたか。命令を減らせばチップ面積は減るだろうけど、大して変わらないような気もする。32 個の 特別な I/O レジスタとか 2レジスタ 転送命令 や ビット操作命令 をやめれば チップ面積を減らせてクロックを上げられそうな気がするが、どうなのだろう?

    ... とか思ったのだが、命令表を見たら 以下のように 普通だった。

    算術命令 (20)
    ADD , ADC, SUB , SUBI , SBC , SBCI, AND, ANDI, OR, ORI , EOR , COM ,
    NEG , SBR, CBR , INC , DEC, TST , CLR , SER

    ブランチ命令 (34)

    RJMP, IJMP, RCALL, ICALL, RET, RETI,
    CPSE, CP , CPC, CPI, SBRC, SBRS, SBIC, SBIS
    BRBS, BRBC, BREQ, BENE, BRCS, BRCC, BRSH, BRLO, BRMI,
    BRPL, BRGE, BRLT, BRHS, BRHC, BRTS, BRTC, BRVC, BRVS, BRIE, BRID

    ビット・フラグ操作 (28)

    SBI, CBI, LSL, LSR, ROL, ROR, ASR , SWAP, BSET, BCLR, BST, BLD, SEC,
    CLC, SEN, CLN, SEZ, CLZ, SEI, CLI, SES, CLS, SEV, CLV, SET, CLT
    SEH, CLH

    ロード・セーブ (10)

    MOV, LDI, LD(9), LDS, ST(9), STS, IN, OUT, PUSH, POP

    MCU命令 (4)

    BREAK, NOP, SLEEP, WDR


    これだと 96命令。 LD/ST の アドレッシングモードを別にカウントして 112 命令。

    Tiny2313 (123 命令) と比べてないのは以下のもの

    算術命令 (2)

    ADIW, SUBIW

    ロード・セーブ (5)

    MOVW, LDD, STD, LPM(3), SPM

    ちょっと数が合わないが、要するに 2レジスタ転送命令系がなくなった先祖返りで Tiny10 と同じということか。ちなみに LPM, SPM は TPI ベースで仕組みが違う以上 なくなる方が自然。

    なんだ。

    ただ、54 って何? というのが次の疑問。

    少なく見積もって 96 だ。大幅に減らすとしたら ブランチ命令 の条件と フラグ操作のフラグ名を モードの違いと定義づけるしかない。

    BREQ, BENE, BRCS, BRCC, BRSH, BRLO, BRMI,
    BRPL, BRGE, BRLT, BRHS, BRHC, BRTS, BRTC, BRVC, BRVS, BRIE, BRID

    これを BRBS, BRBC の別名にすれば -16 。

    SEC, CLC, SEN, CLN, SEZ, CLZ, SEI, CLI,
    SES, CLS, SEV, CLV, SET, CLT, SEH, CLH

    これを BSET, BCLRの別名にすれば さらに -16 。

    こうすると 64 命令にはなる。しかし後 10 命令は?

      ここに 命令一覧がうまくまとめられている。

      LSL 0000:11dd:dddd:dddd # logical shift left (= ADD Rd,Rd)
      ROL 0001:11dd:dddd:dddd # rotate left thru C (= ADC Rd,Rd)
      TST 0010:00dd:dddd:dddd # TEST (= AND Rd,Rd)
      CLR 0010:01dd:dddd:dddd # clear register (= XOR Rd,Rd)
      SBR 0110:KKKK:dddd:KKKK # set bit register (= ORI)
      SER 1110:1111:dddd:1111 # set register to 255 (= LDI) (追加)

      どうも別名の命令がもともとあるらしい。これで -6 。
      (追記: SER に後で気がついた。以下それに合わせて修正)

      なんでもアリなら carry あり/なし を 1 命令に定義しなおすことは可能だ。

      ADD 0000:11rd:dddd:rrrr # add without carry
      ADC 0001:11rd:dddd:rrrr # add with carry

      SBC 0000:10rd:dddd:rrrr # subtract with carry (borrow)
      SUB 0001:10rd:dddd:rrrr # sub w/o carry

      CP 0001:01rd:dddd:rrrr # compare withoout carry
      CPC 0000:01rd:dddd:rrrr # compare with carry

      SBCI 0100:KKKK:dddd:KKKK # subtract immediate with carry
      SUBI 0101:KKKK:dddd:KKKK # subtract immediate w/o carry

      こんな風な関係。普通ではないかも知れないが、これで数はあう。

      あとは、SET/CLEAR だとか INC/DEC とか シフトの方向だとかで 2個イチにはできる。

      BRBS 1111:00kk:kkkk:ksss # branch if bit set
      BRBC 1111:01kk:kkkk:ksss # branch if bit cleared

      BSET 1001:0100:0sss:1000 # bit set in FLAGS
      BCLR 1001:0100:1sss:1000 # bit clear from FLAGS

      CBI 1001:1000:AAAA:Abbb # clear bit in I/O register
      SBI 1001:1010:AAAA:Abbb # set bit in I/O register

      SBIC 1001:1001:AAAA:Abbb # skip if bit cleared in I/O register
      SBIS 1001:1011:AAAA:Abbb # skip if bit set in I/O register

      LSR 1001:010d:dddd:0110 # logical shift right
      ROR 1001:010d:dddd:0111 # rotate right thru car

      INC 1001:010d:dddd:0011 # increment register
      DEC 1001:010d:dddd:1010 # decrement

      極めつけは、演算つき レジスタ間移動命令

      AND 0010:00rd:dddd:rrrr # logical AND
      EOR 0010:01rd:dddd:rrrr # exclusive OR
      OR 0010:10rd:dddd:rrrr # inclusive OR
      MOV 0010:11rd:dddd:rrrr # copy register

      遊びのようなものだが、減らす方法はいろいろありそうだ。

    まぁいいや。しかし、命令数を 可能な限り少なく見積もるのに なにか意味があるのだろうか?
    ちょっと驚いたが、普通だということが分かって安心した。

    ... と思ったが汎用レジスタが 32本→16本に減っているのに気がついた。これは面倒な話。

      こんな AVR は存在したことがない。AT90S2313 や その前の世代の AT90S1200 ですら 32個ちゃんとある。レジスタ減らすと ABI の定義から初めて GCC までだいぶ改造しないといけないはず。

      ちなみに 16 個のレジスタは、r16 - r31 。X/Y/Z レジスタがあるから当然か。

      で、そこまでするメリットがあるわけか。

        レジスタは単純なメモリではない。最低でも 1 clock (あたり) LOAD x 2 + STORE ができないといけない。2 レジスタ同時だと STORE x 2 。しかも、パイプラインプロセッサだから、演算結果を STORE する前に参照できないといけない。配線の規模がばかにならないということになる。

        ちなみに、I/O レジスタも メモリではなくレジスタなのだ。分岐命令で BIT を見たり できるから 特別な配線が必要。これも規模が増える要因。だが、32 より上のアドレス(こちらはメモリに近い)に移動したりしていないようだ。削減の効果がレジスタほどではないということか。

        追記: 頑張って GCCで サポートしたようだ。ググってみると、

        The AVR 8-bit GNU Toolchain : Release 3.1.0.206

        The AVR 8-bit GNU Toolchain adds support to the following devices: • ATxmega128B1. ATTiny10 Support.

        それは良かった。FPGA なんかで 互換プロセッサを作る場合、規模を減らしても GCC が使えるというわけだ。(というより、こういうのは FPGA でこそ有用だろう。)
        それはともかく、ATxmega128B1って何? USB とか付くと嬉しいのだが。

          これは本当に USB 付きらしい。見つけたのはロシア語のページだったのでよく分からないが、どうも (開発版?) Flip に ATxmega128B1 が USB デバイスとして登録されているらしい。これに限らず開発ツールは発表前に対応するから 注意深く見ていると じきに入ってくるだろう。

          結構嬉しい。入手できる頃にホンキを出そう。

          追記: WinAVR は開発終了で AVR Toolchain に移行したのだそうだ。知らなかった。

          とりあえず、レジストなしで入手するには、AVR Tools Beta Site に行って、AVR32 Studio 2.7 (Windows 版と Linux 版がある) の zip をダウンロードし、そこから抜き出すしかないかも。zip で 300MB 前後あるから 全部をインストールするのは、ちょっと 困る。gcc がある .../x86 ディレクトリだけ取り出して zip で固めると 84MB まで減る。ここから さらに avr32 関係と doc,info,man など抜いてしまえば 30MB まで減る。

          とりあえず取ってきたものは、AVR32 Studio 2.7.0.851 (Toolchain 3.1.0.201012011657)。これをちょっと使ってみようかと思う。

        ところで、ついでに次の文章を見付けた。

        (Tiny10 について) But its use is limited by its silly programming scheme - it requires 5V power and 5V singles on 3 of the 4 IO pins.

        TPI のデバイスを扱う場合は、電源周りをよくよく調べておかないと。



    さて、ちょっとでも興味があるのは Tiny20 か。なにしろ Tiny44 系と似ている。

    • ADC が シングルエンドしかない。AREF もない。
    • USI がなくなり SPI/TWI が付いた。
    • ISP がなきなり TPI になった。
    • 水晶/セラロックは付かない。
    • DIP がなくなり TSSOP が追加された。

    命令以外の違いはこんなところか。TWI や SPI が付いたのは嬉しいし、TPI も歡迎。だが、ADC の機能は寂しくなった。

    劣化した機能は、実際には役に立たない/あまり使われない... ということだろうか?

    確かに USI での I2C スレーブは問題があった。2レジスタ転送命令系は性能が多少違うだけ。
    ADC はどうなのだろう?

      ちなみに、Touch sensing という 特別な項目があり、QTouch ライブラリに最適化したチップだという説明がある。どういうことだろう? 普通のADC のようにしか見えないのだが。

      追記: まったく説明がないが QTCSR というレジスタがあった。なんだろう?
    posted by すz at 03:13| Comment(0) | TrackBack(0) | 日記

    2011年01月09日

    eJackino製作中

    いまさらながら、eJackino (と AE-ATmega) を製作している。AE-UM232Rピン互換ボードのテストが目的。最初は、AE-ATmega を作り出したのだが、ケースに入らないことが分かって、確認のために eJackino のボードを出したので、これも作ることにした。



    パーツが足りなくて未完成だが、良い感じになってきたので紹介。

      最近は表面実装の部品ばかり使っているので、発掘しないと ダメなのだ。いっそのこと買い直した方が手っ取り早そう。発掘したとしても手元にないのは、セラロックと DCジャック。発掘すれば見つかるはずなのが 10K の抵抗と 16M の水晶。

      ちなみに 電源は、バスパワーしか考えていない。付けたとしても 安定化 5V にするつもり。なので問題は 10K の抵抗と 16M の水晶だけ。面倒なので 表面実装の部品を無理やり付けようかとも思っている。



    ケースが目につくと思うが、これは千石で(も)売っている RFADテクノロジー MK8260 (326円)。こんな風にあつらえたように ぴったりなのだ。

      ガラス窓付きケースというもので、ガラスを外してそこに基板を入れている。逆にすることで仕舞うためには、そのままだと枠が干渉する。
      ー最初だけ: 現在は枠と基板の順序を逆にしている。最初の写真も置き換えた。

      ちなみに、arduino はこれより短いので ぴったりにはならないが 多分入る。(最後の方参照)

      枠の外し方: 薄手の平刀(ダイソーで買った)を使って中央から差し込みながら徐々に端まで外していく。厚い刃だと無理。カッターナイフでも出来るかも知れないが、こじったりできないし厳しい。たぶんこれが最も楽で安全。

      ちなみに このケースについて以前記事にしたことがある。→ 『RFADテクノロジーのケース

      追記: 東京サイエンスで扱っている標本ケースが(おそらく)元で、中薄ケ−ス( 82× 60×h20mm) 250円以外に 大厚ケ−ス(118× 82×h40mm)500円、中厚ケ−ス( 82× 60×h40mm) 290円なんてのがある。-- 中厚ケ−スもなかなか興味深い。


      (上記リンク先カタログから引用: 中薄ケ−ス(SC003) == MK8260)


    IC ソケットは 秋月の 丸ピンICソケット 32P を切って使っている。あと工夫したところは、電源切り替えのところをスイッチに変えたぐらい。

    もちろん、RST は パターンカットしている。



    こちらは、AE-ATmega 。いまのところ同じ状況。



    残念なことにこいつは少し長くてケースには入らない。あと作っていて気がついたのだが、本体LED (透明のやつ)は、向きが逆になっている。要注意かも。

      よくよく見たら 1mm ほど長いだけ。AE-UM232R 側を削れば うまく入りそう。(上部ケースの) 両サイドは削らなくても良いから、かえって収まりが良いかも知れない。


    追記: 基板を削ってケースにいれた。



    1mm 削るのは基板を切るのとさほど変わらないと思い直してケースに入れてみることに。(前の写真は、削りカスが付いていてきたないので置き換え)

    AE-UM232R 側だけだと厳しかったので、反対側も少し削っている。ケースの上部は AE-UM232Rだけでなく、LED も干渉してた。

    あと水晶を付けた。無理やりっぽいが、eJackino ではコンデンサもいるので、こうする理由はある。

      動作確認したが、水晶の接触不良があった。なかなか難しい。

      実を言うと AREF のコンデンサを間違えた。0.01uF にしてしまった。
      ーこれは、AREF だしまぁいいか。


    追記: 仕舞えるようになった。



    eJackino は、そのままでケースに入った。AE-ATmega は、ISP コネクタに当たる部分を削ることで入るようになる。ただし本体のみである。

    基板から 12mm 高以内にしないと入らない。AE-UM232R だと ピンヘッダの高さを押さえる改修をした上で基板に直付けしなければ無理。

      kosaka さんの記事に、『DCジャックより背が高いとシールドに干渉します。』と書いてあった。11mm に抑えた方が良いらしい。

    ケースに入れるのを前提にモジュールを設計するのなら 当然ながら IC ソケットを使うことも可能なのだ。細ピンヘッダを加工して、モジュールから直接足を出せば、12mm 以内に収まる。私の場合UM162 を作るわけだからなにも問題ない。

      AE-UM232Rの足を外そうとしてみたことがあるが、壊してしまった。ちなみに マルツ MFT232R が AE-UM232R 互換で足がついていない。ただ、高価なのが問題。

      12mm と書いたが、12mm を切るかも。下側のケース 自体 14mm で底面がどれだけかが問題。
      とりあえず 12mm として、4mm が IC ソケット、1.6mm が(モジュール)基板に取られる。残り 6.4mm 。USB MINI-B がもっとも背が高いように改修したとして 4mm 。2.4mm 残るから 細ピンヘッダ(根本の部分 1.5 mm) なら問題ない。

      ちなみに 細ピンヘッダは足が長すぎる。一本づつ押し出して長さを調整しておかないといけない。

      AE-UM232Rの足を外すのは、全部のピンに熱を与えないとダメで結構難しい。しかも抜いた後スルーホールからハンダを除去するのが面倒。



    ケースに載せたところ。AE-ATmega の方は、ぎりぎりまで削ってみたが、ここまでやらない方が良い。あと0.5mm ほど残しておいたほうが良かった。ぎりぎりまで削るべきなのは反対側だった。

      枠に挟む方法なら問題ないのだが、下側のケースに乗せる方法だと、AE-ATmegaの短辺が短いのでちょっとずらすとケースの中に落ちるのだ。基板が薄いので強度的にも問題がある。

    • ISPコネクタ側を ぎりぎりまで削る。2 つの穴のふちぎりぎりが目安。
    • 現物合わせで、上部ケースに嵌まるように、AE-UM232R 側を削る。

      こんなところか。削るのには大きい平ヤスリを使った方が良い。小さいのだと効率が悪い上、精度を出せない。ちなみに、大きい平ヤスリも百均(セリア)で購入。

      削りすぎたので、下側のケースに 内枠を付けるとか工夫が必要になってしまった。

        結局、ユニバーサル基板を切って、内側側面に両面テープで貼り付けることにした。弱い部分の補強にもなったので、これでよしとする。




    いままで枠で基板を挟んでいたが、枠を上部に追いやった。たぶんこれが完成形。

      AE-ATmega では、枠を下側のケースに貼り付けたほうが良かった。仕舞ったときの高さもかせげるし。だが後の祭り -- もうはずせない。

      .. と思ったが、内側に 板を貼ることで、補強になり 基板がケースの中に落ちることもなくなった。そうであれば無問題だ。

    追記: ほぼ完成か?



    大して代り映えしないのだが、相当な苦労の末完成に大分近づいた。



    まずこれ。AE-UM232R の 足と上部ピンヘッダを全部外して、細ピンヘッダに付け替えた。全部一度に外せなかったので、足のところのプラスチックを 2ピン毎に溶かして 2ピンづつ外している。で、コテ先が相当痛んだ。プラスチックが付着した感じで、なかなか元にもどってくれない。ちなみに、以前は横着して、ニッパで割っていたら スルーホールが死んだ。

    今回も中央のスルーホールが死にかけ。eJackino はオープンで使うので、これでも良いか。




    一応リファレンスのつもりで作っているので、TX/RX/DTR の 6pin に ジャンパピンをすなおに付けている。そうすると 今度は削らないと仕舞えなくなってしまった。

    なかなかに面倒。



    使わないと思うのだが、DCジャックを一応eJackino に付けてみることにした。AE-ATmega はDCジャック を付けるのを最初からあきらめた。

    AE-ATmega はきちんと仕舞えるのだが、ejackino は、DCジャックをつけたおかげで、ちゃんとは仕舞えなくなっている。DCジャックのところも 6pin のところのようにしないと。

    ちなみに AE-UM232R 付けたまま仕舞える。12mm はクリアできたわけだ。だが、微妙に DCジャックより背が高い気がする。AE-ATmega は、写真の状態だとあて板が干渉した。ずらさないと付けたまま仕舞えない。

    ついでに書いておくと、まだ未完成。まだ、AE-UM232R の動作確認もしていない。その前にジャンパーピンをどうするか決める必要があるのだ。

    • J2(2ピン) : VCC への電源供給。これはオプーンで良いが、単独で使用できなくなる。スルーホールが死に掛けだしどうするか悩んでいる。-- もう外せないから失敗はゆるされない。
    • J1(3ピン) : VIO - VCC を外部で接続することで オープンで良いようにするつもり。だが、これも単独で使用するためには、ちゃんと付けないといけない。高さをクリアするために下部に付けるしかないと思うが、足の根元は、1.5mm 。これより下まで出ると ブレッドボードのとき すわりが悪くなる。やはり悩ましい。



      最終的にこうした。J1 はジャンパピンを差した状態でギリギリになるようにして上部にハンダ付け。

      J2 は、よくよく考えて ダイオードにした。ダイオードだと VCC に入力する電圧が下がるが別に問題ない。eJackino では 5V と VCC が接続され 5V になる。ただし、外部電源にしても 電源をいれなくとも 4.4V ぐらいが供給されてしまう。.. といっても UNO と同じようなもののはず。

      AE-UM232R の電源と 本体の電源を完全に分けることも出来そうだ。(AE-UM232R の)#15 VCC を パターンカットして N.C. にしてしまえば、VIO は外部から供給され VCC はバスパワーで動作する(はず)。(ちなみに、eJackino 側の # 15 VCC → VIO をジャンパしている。)

    おまけ: (RST パターンカット済)



    参考: arduino と RFADケース



    確認したところ別の意味でピッタリだった。まぁかえってこっちの方が良いのかも知れない。ちなみに、枠にはさむ方法にすれば、問題なく上部にマウントできる。

    ケースの下側の深さは 12mm で、枠が 2mm ぐらいだから、ガラスに接触しない。(一番高さがあるのは、USB-BコネクタDCジャックで 11mm 、3mm あるから 基板厚を考慮しても大丈夫)。長辺の幅は、USB-B コネクタが飛び出ていて微妙な感じ。

      調べてみたが、(UNO , Duemilanove 両方)全長 75mm 。一方このケースの内寸は 76mm 。保管用なら、まさにぴったり。

    ケースの 内側底面 から 18mm 。ピンヘッダの根元が 2mm / ピンソケットが 8mm / 基板が 1.6mm として 基板底面からボトムまで 6.4mm 。

    使うためのケースならこれだけ浮かさないといけない。プラスチック連結スペーサーを切ったりすると良いかも。

    内側側面に板を貼るのもひとつの手。プラスチック(ABS)で問題がないが、 ユニバーサル基板を切って貼るのもアリ。

    おまけ: 電源自動切り替え

    UNO の回路図を見ると、外部電源 と USB (VBUS) を自動的に切り替えるようになっている。もう少し詳しく書くと、コンパレータを使って 3.3V の 2 倍の電圧が 外部電源として入力されると、USB (VBUS) を 切り離す。



    簡易な回路としてこんなのは、どうだろう? UNO も Pch MOS FET を使っていて、普通とは逆向きに Source を 出力側に付けている。こう付けると ボデーダイオードで、Off でも 電圧は下がるものの通電する。外部電源がなければ、Pch MOS FET は ON になるので、低抵抗でつながるわけだ。外部電源があると、Pch MOS FET は Off になる。D1は、逆流しない機能であれば良く、arduino の場合は、レギュレータに置き換えて考える。(... で良いとおもうが未確認)。また、外部電源を 安定化 5V にすると ダイオードによって電圧が下がるので少々具合が悪い。

    ちなみに この回路は、『中華フォトフレーム』を分解して知った。バッテリーと 外部電源(USB) を切り替えるのに使われていた。(この場合は バッテリーは USB VBUS の方に相当)
    posted by すz at 00:56| Comment(4) | TrackBack(0) | 日記

    2010年12月15日

    著作権法の改悪に反対する

    このブログは技術的な話題しか書かないのだが、こればっかりは書かざるを得ない。著作権法は既に技術的手段に言及があり、技術を封じ込める面がある。今回の改変はさらにこれがエスカレートすることになりそうだ。

    DVDコピー、家庭内も禁止へ 暗号で保護のソフト対象』これを読むと、

    • 暗号化技術を使って保護されているソフトが対象で、保護を破るプログラムの製造や配布も禁止される。

    と書いてある。この一行を読むだけで、なにやら うさんくさそうな感じがする。

    • まず、「暗号化技術を使って保護されているソフト」を(ひとつ)作れば、「保護を破るプログラムの製造や配布」 を制限できる と読める。

      まさかこのままの意味ではないだろう。暗号化した zip をひとつ作れば (Windows そのものを含む) zip の解凍ソフト の配布を禁止できたりすることにはならないだろう。

      でも、だれでも著作物は作れるのである。このとおりではなくとも、従来のフォーマットのDVDを保護しようとする法律を作れば、既に広く普及している 「プログラムの製造や配布」 を簡単に制限できることになるはずだ。

      だから、たぶんそんなことはないのだろうが、このような法律にしようとすること自体が同じぐらいおかしなことなので、安心して見てられない。

      Windows はなんとかしても、ubuntu など メディアプレイヤーの機能をもったソフトの 「製造や配布」 を制限されるかも知れない。油断しているとひどい法律になるかも知れない。

        従来のフォーマットまで保護するのは論外でありえないとして ..
        暗号が破られていない ブルーレイのようなものを対象にしているしよう。で、暗号を破ること自体は海外では違法にはならない。海外で 暗号を破り、「暗号化技術を使って保護されているソフト」をひとつ作り 日本に持ち込めばどうなるのだろう? 
        ひょっとしたらブルーレイ・プレイヤーの 「製造や配布」 を制限できてしまうかも知れない。法律に穴があれば恐ろしいことになるのだ。「プログラムの製造や配布」 を制限するような 大きな権利を与えることは危険なのだ。

    • もっと恐ろしいことに、「暗号化技術を使って保護されているソフト」なら 誰も勝手に解読できないし、できたとしても解読してはいけないわけだから、中身が見えなくとも保護される。

      コピーした違法な著作物を 「暗号化技術を使って保護」すれば、だれも手出しできないのではないか?

      まさか対策を考えていないとは思いたくはないのだが ..

        違法な手段に訴えないと違法な著作物であることは分からない。そして 違法な手段をつかえば 法律は保護してくれない(クリーンハンズの原則により 親告罪である著作権侵害罪の告訴が受理されない)。

      これをどうクリアするのか? へたに対策をすると、さらにおかしな法律になりそうだ。

      だいたい、暗号化されたものは、(意味のある)表現ではない。表現でない以上著作物ではないだろう。暗号を解いて出てくるものが著作物であり、著作権法の対象は 暗号化されていないものに限るべきだと思う。

      範囲を超えて保護しようとするとおかしなことになるのは必然だと思うのだが、どうだろう?

    • じつは 最も主張したいことは別にある。著作権法は技術的手段に踏み込むべきではないということ。

      著作権は有限の期間しか有効でない。技術的手段も規定してしまうと、権利がなくなってしまったものまで保護することになる。

      著作権が切れたとき、著作物は社会のものになる。著作権というものが存在できる前提だと思うのだが、それをどうやって担保するのだろうか?

      著作物をメディアに縛り付けると、著作権が切れるまでメディアが持たない。切れたときには消滅しているか、切れてなお(もとの)著作権者が権利をコントロールできることになるのである。

        ちょっと違う話になるが、引用する権利はどう考えられているのだろう? 技術的手段も規定してしまうと 引用まで不可能になる。

      これがたいそう気に入らない。こういう特別な保護を認めるなら 登録制にしてほしい。マスター を 政府に登録してもらって、 著作権が切れたとき、著作物は社会のものになることを担保してほしい。もちろん 保存する費用がかかるだろうが、登録料をとってかまわない。特別な権利を与えるのだからおかしなことではない。そして登録料の支払いが継続できなければ、著作権も消滅させる。... これぐらいしてほしいところだ。

    これぐらいの懸案点がすぐ出てくるのだが ... それらが解消された形で 改正されても なにも問題を解決しないように思える。

    • 著作物をメディアに縛り付けると 利便性が明らかに低下する。技術は進むから 十年ぐらい先のことを考えると 買った著作物は 役に立たないものになっているはずだ。

      現在でも DVD ぐらいは microSD にらくらく入る。正規に買っても メディアプレイヤーに 入れるために リッピングするのが普通だろう。ブルーレイなど新しい規格でも 10 倍程度の容量でしかないわけだから、3-5 年先には DVD と同じような 感覚になってくるはずだ。

      そうなると、メディアに縛り付けられた著作物を誰が買うのか? 全部 ダウンロード販売に流れることになるのではないか?

      ( 結局、市場が消滅するのを加速するだけの結果になるのではないか? )

    • メディアに縛り付けて意味があるのはゲームのソフトだけになるだろう。それでも やはり技術は進歩する。技術の進歩によってたとえば 今のマジコンが存在しているわけだが、それもさらに技術が進めば意味がなくなる。たぶん 完全なエミュレータは出来るだろう、今の Advance のソフトの状況を見れば、それが将来 DS にも起きるのは明らかである。

      で、そういうものは 海外で作られる。日本の法律だけどうこうしても意味がない。日本のユーザだけが利便性を取り上げられ、海外で好き勝手にされている状況は変わらないだろう。

      ( 暗号化の解除に関する規制は、暗号化を解除されてしまったものとは無関係だ。まったく意味をなさなくなるまで、時間はかからないだろう。)

    はっきり言って 、法律を決める人たちは 今と過去しか見えていないし、影響を与える範囲も見えていないのでは? と思える。

    そんなことはないだろうと思いたいのだが、子供手当てでもザルなのが露見しているし、ザル法をつくられる疑念がぬぐえない。

    というわけで、一応(反対を)表明しておく。

      補足しておくと、これを書いたのは こういう視点での議論があまりされていないと思えたからである。こういう疑念は一例であるが、既に回答が用意されていないようだと十分に議論されたとは言えずザルである可能性が高い。
      中身がよくわかっていないのに反対するのはおかしいと思われるかもしれないが、とりあえず反対しないと、取り上げられもしないのである。なので、反対と書いたが、表明することに重きを置いている。(特許だとこういうプロセスがある。)


    追記: 「技術的保護手段に関する中間まとめ」



    「技術的保護手段に関する中間まとめ」に関してのリンクを貼った。

      これをすこし読んだが、予想以上にひどい。現時点の DVD や ゲームソフトをどのように保護するかの視点だけで書かれており、それ以外のものについてどのような影響があり得るかについて まったくと言ってよいほど考察されていない。それに将来的にどうなるかについての考察もまったくない。

      例えばフェア・ユースについて 米国の例として出しているが、日本版フェア・ユースが策定されたらどういう関係になるのかすら記述がない。フェア・ユース目的ならば、技術的保護手段の回避にあたらないということにでもなれば、技術的保護手段に関する規定が無意味になってしまうから重要な観点だと思うのだが関知しないらしい。

      それに コピーコントロールCD そのものについての記述はあるが、その顛末についてもまったく考察されていない。規制を強化すれば DVD がまったく売れなくなる結果になりそうなのは容易に想像でき、一部の著作者には不利益を与えることになりかねないが考察にも値しないらしい。

      上記の2つの例ですら考察されていないのだから、都合の悪いものは見ないという方針が貫かれているようにしか思えない。そうやって作られてしまうと (関係者が)思いもしなかった悪用がされるものになってしまう恐れがある。

      予想以上にひどいと思ったのは、まずプログラムの製造・所持に関する規定だ。

      技術的保護手段の回避を専らその機能とする装置・プログラムの公衆譲渡等目的の製造・輸入・所持

      が禁止されるらしい。まず、GPLやBSDライセンスなどパブリック・ライセンスのものは、そもそも『公衆譲渡等目的』のものである。これらが禁止されるわけだ。

      プログラムは、パーツに分けられるから 『専らその機能とする』はなにも意味をなさない。『技術的保護手段の回避』あたるかどうかだけが焦点になりそうだが、『技術的保護手段』の範囲を広くしようとしているから、思わぬものが引っかかる可能性がある。

      また、技術的保護手段の回避をして 得られた著作物は、私的利用の制限を外すらしい。私的利用の制限が外された著作物とそうでない著作物の ニ種類ができるということになる。技術的保護手段の回避の手段の所持でさえ禁止されるわけだから 保護期間の制限も事実上外されているわけだ。一方に権利を与えて一方に与えないということであり、おかしな話のように思える。

      パブリックコメントに意見は出したいのだが、つっこみどころが多すぎる。理解してもらうためには、悪用される例を探して、こういう権利まで認められるのか? という書き方が有効だと思うのだが、期限は 2011/1/7 まで。なかなか時間的に厳しく間に合わないかも知れない。

    追記: 「技術的保護手段に関する中間まとめ」に対する意見を送った。

    相当に問題があるので、とにかく意見を送るだけは送ることにした。どのように扱われるか分からないし、指摘点そのものを理解されなくて無視されるかも知れない。「技術的保護手段に関する中間まとめ」に問題を感じている方は是非意見を送って欲しい。

    ここに「送った意見」を添付しておく。これは一例として考えて欲しい。まだまだ問題があるはずだ。また、送った内容を読んで分かりにくい等、改善点を見つけた方は是非修正したものを自分の意見として送って欲しい。添付した「送った意見」の著作権は放棄する。コピーして一部修正したものを自分の意見として送ってもかまわない。

      補足: この意見は、プログラムをレビューしたりデバッグしたりする時の流儀で作成している。
      観点は、論理として筋が通っているかどうかだけである。ただし、論理だけを書くと理解されない恐れがあるので、説明自体は具体的に書くようにしている。
      その結果、なにか主義主張があって書かれているように見え、その主義主張に一貫性がないように見えるかも知れない。そういうことは気にしないというのが レビューしたりデバッグしたりする時の流儀であるので、誤解されるかも知れない。

      また相手を信用しすぎてはいけないと思う。法律というものは、論理としてはプログラムと比べれば単純である。人に理解されることを目的としているものが、プログラムほど複雑な論理であるはずがない。だから、相手は複雑な論理を扱うのに慣れてはいないと考えるべきであって、十分な説明が必要なのだろう。

      これでは十分ではないような気もする。是非、説得のための内容を補間して自分の意見にして送って欲しい。

      追記:やはり書き足りない。どうしよう。

    • 5 番目の意見の補足:

      この法律が意味を成すには、やはり『「技術的保護手段」をひとつのライセンサーに独占させる』というのが前提になると思う。なんの登録も必要なしに、 違反した者に対して 刑事罰を求められる権利を認めてしまうのはどうか? アルゴリズム -- アイディアに属する 特許法の範疇の権利が 無料で期限なしに登録さえ必要とせずに 認められるのである。

      しかも 条件がはっきりしない。 DVD など既存のアルゴリズムさえ「技術的保護手段」として認め保護しようとしているように見えるから、やはり zip の暗号化さえ 「技術的保護手段」として請求できてしまうような気がする。区別する論理は存在しないように思える。そうなれば、zip の複合化コードを入手している人に対し 刑事罰を求めることができる。恐ろしいことである。

      しかもこの権利は、ほぼ世界中の人間に与えるのである。著作物を日本に持ち込むだけで良い。実際に利用する人間は不在でかまわない。刑事罰を受ける側は国内にいる人間だけで、権利を与えた人間に及ぶとは限らない。どのような権利の行使が行われることになるのか、想像すると非常に怖い。

      こういうのは あり得ないはずなのだが、現実に形となっているわけで とても危険である。

    • 1 番目の意見の補足:

      zip の暗号化が「技術的保護手段」として認められないとしても、ある種のソフトウェアは 「技術的保護手段」として認められるのである。登録が必要ないことから なにが 「技術的保護手段」として認められるか判断できす。後出しですら OK そうある。そして 違反していれば 刑事罰を求めることができるわけである。

      で、譲渡目的 -- 言い換えれば 誰にでもライセンスすることを目的とした ソフトウェアの製造・輸入・所持および 公衆への頒布に 刑事罰を求めることができる。

      なにが 「技術的保護手段」として認められるか分からない状況で、いきなり 刑事罰を求めることができるわけであるから、オープンソースソフトウェアの所持そのものが危険ということになる。そうなると、オープンソースソフトウェアの活動を破壊させる効果が出てくる。後出しがダメだとしても、それと知らずにダウンロードすることがあるわけで いきなり 刑事罰を求められる危険性があることには変わらない。

      これは恐ろしいことである。誰にでもライセンスすることを目的とするものは、基本的に文化の発展に寄与する意図があると捉えるべきものであろう。

      そういう意図があるはずはなく、そのようなことをするとすれば なにか悪意しかないと判断しているわけである。で、それを阻止して 著作者の商業的利益を守ろうとしているわけである。

      文化庁は文化の敵であると自ら宣言したと という論理すら成立しそうだ。

        誤解されるかも知れないので、さらに補足しておくと、そう主張しているわけでも、そう主張したいわけでもない。したいのは単なるデバッグである。デバッグでは、可能性が(ある程度)ある仮説を(できるだけ多くの視点で)いくつも立てて、厳密に精査していく。否定できるだけの論理がないとバグである可能性が濃厚になっていく。プログラムの場合は、こういう検討をしたということをできるだけ残す。残さないと検討すらしていないと見做され信頼されない。法律の場合も基本おなじような手順だと思うのだが、ひょっとしたら違うのかも知れない。



    「送った意見」-- 1意見1メールなので、以下の6つを別の意見として送った。

    • [6]該当項目および頁数 :◆第4章 19頁 回避機器規制の対象となる行為
      [7]意見

      ... 頒布目的の製造、輸入、所持を規制対象にする旨が記述されているが、
      GPLライセンスやBSDライセンスのオープンソース・ソフトウェアはそもそも頒布目的のものである。これらは膨大な量に及ぶ上、多数のソフトウェアをまとめて入手する行為も普通に行われている。(海外では合法のため)規制対象となりうるソフトウェアがまぎれ込む可能性があり選別するためには非常な労力が必要になることが予想される。

      また、既に入手しているソフトウェアが、新たに規制対象になりうるとすれば、所持している膨大な量のオープンソース・ソフトウェアから選別するための非常な労力を個々人に果たすことになる。

      従来と同じ考えで問題ないとはとてもおもえない。新たに規制対象になる以前から所持しているソフトウェアの所持に対しては、規制対象から外すべきであり、また輸入に関しては、新たに規制対象なったものでも故意でなければ規制対象にすべきではないと考える。

      それが認められたとしても、頒布に関して問題がおきる。オープンソース・ソフトウェアでは海外のサイトをミラーしており、利用者の便宜を図っている。このミラーサイトが違法となる可能性がある。取り除くとしても、整合性を保つために新たなソフトウェア開発が必要になる可能性がある上、そのままの形でしか頒布を認めていない場合、ミラーサイトが成立しない可能性もある。

      以上の理由により、規制対象となるソフトウェアが紛れ込んでいることを知っていても対処ができない可能性がある。輸入したものをそのままの形で頒布する場合は、規制対象から外すべきであると考える。

    • [6]該当項目および頁数 :◆第4章 19頁 回避行為規制 基本的な考え方
      [7]意見

      日本でもフェア・ユースの概念を法律に盛り込む動きがあったと記憶しているが、
      これが認められた場合、回避行為規制が無意味になる可能性がある。どのように対処

      するのか 考え方を盛り込むべきであると考える。

    • 該当項目および頁数 :◆第4章 19頁 回避行為規制 基本的な考え方
      [7]意見

      過去に正規に入手した DVDの複製やメディア変換による非正規の機器での
      視聴が認められなくなるとすれば、正規の利用者の利益を損ずることになる。また 過去にメディア変換した私的複製の所持が認めらなくなるとすれば
      正規の利用者の利益を大きく損ずることになる。この不利益は、違法な
      複製による権利者の不利益よりはるかに大きいと考えられるが、基本的な
      考え方が提示されていない。

      正規の利用者の利益を損ずることになれば、正規の利用者の怒りを買う
      ことになり DVDの市場が壊滅するほどの動きになる可能性も考えられる。

      また新たに購入するDVDの複製やメディア変換が禁止されるだけであっても、正規の利用者にとって価値がさがるということであり、DVDの市場が
      縮小していくのは明らかである。( コピーコントロールCD が存在しなく
      なったのは、保護の方式の不完全さにも理由があるが、正規の利用者の
      利便性を大きく減じたためであると考えられる。DVDの市場にも同じこと
      が起きる恐れがあることは容易に予想できるはずである。)

      これについての是非は問わないにしても、 非常に重要な要素であり、
      基本的な考え方を提示すべきだと考える。

    • [6]該当項目および頁数 :◆第4章 19頁 回避行為規制 基本的な考え方
      [7]意見

      CSS 型の「暗号化」の技術について、技術的保護手段の対象と評価する
      とあるが、悪用される恐れが多分にある。

      有効な著作物がすくなくともひとつあり、「技術的保護手段の対象」
      と評価される「暗号化」の技術が存在したとする。

      そうすると、回避機器規制のため ライセンスを受けなければ 回避機器を
      所持できず、同じ「暗号化」の技術を用いて暗号化したものの復号が違法
      になる。

      著作物でないものの保護は行わないとも別の箇所で記述があったが、
      実質に有効に機能するのか甚だ疑問である。

      有効に機能しなければ、違法な著作物を暗号化したものですら保護
      されることになり、かえって違法な著作物の蔓延を助長する恐れすらある。

      「技術的保護手段の対象」と評価するには、条件が足りないと考えられる。
      おそらく「誰でもライセンスを受けられるようにすること」というのがひとつの条件だろう。中身を確認することが可能なようになっていれば、
      少なくとも違法なものを保護してしまう可能性はなくなる。
      ただし、高価な価格を付けられるとその条件も有効に機能しない
      可能性があり、「無料での試聴を許可すること」も条件にしない
      といけないのではないか。

      このように考えるにしても著作物そのものの試聴でなくては意味を
      なさないため、「技術的保護手段の対象」と評価するには、必然的に
      「アクセスコントロール」を合わせもったものになりそうである。

      基本的な考え方では、こういったことについてどう考えるのかについての
      方針を提示すべきではないか。

    • [6]該当項目および頁数 :◆第4章 19頁 回避行為規制 基本的な考え方
      [7]意見

      「復号化」しか問題にしていないが、「暗号化」の技術自体の複製に
      ついての考え方が必要である。「暗号化」の技術そのものはアルゴリズム
      であり、著作物ではないため同じ動作をするソフトウェアの開発は可能で
      ある。

      それで暗号化した著作物が存在すると「技術的保護手段の対象」と認め
      られ、正規の「復号化」ソフトが違法となる。

      「暗号化」自体は海外で行うことも可能なため違法とすることはできない。
      「技術的保護手段」をひとつのライセンサーに独占させなければ、この問題は
      解決しないと思われるが、その是非もあるので、基本的な考え方で方針を提示
      すべきだと考える

    • [6]該当項目および頁数 :◆第4章 19頁 回避行為規制 基本的な考え方
      [7]意見

      「技術的保護手段の対象」の範囲が広がり影響が拡大するため、
      従来も規制されていた件についてだが意見を書かせていただく。

      回避行為規制は、著作物でないものを保護しないとは言え、回避手段を規制
      されてしまっているため、実質、著作物でないものも保護してしまう。

      著作物であっても 著作権の保護期間は有限であるため 権利がなく
      なった後も実質保護してしまうことになる。

      特に DVD などメディアに縛り付ける著作物は、メディアが保護期間終了
      まで持たないことは確実である。社会への還元を放棄していると見做す
      こともでき、文化の発展に寄与していると言えるのか?、
      そのようなものに手厚い保護が必要なのか?という疑問もある。

      このことについて、合理的な説明が必要であると考える。

      私見ではあるが、「技術的保護手段」と認め権利を与えたものについては、
      担保をとり著作権の保護期間終了後に政府が公開したらどうか?

      また、メディアが破損したときに 発売が停止していたりすると場合
      二度と入手できないことになる。
      「技術的保護手段」を与えたものが入手できないことに対する
      救済措置が必要と考える。担保をとっていれば政府が著作者の代わりに
      正規の利用者の権利を保証することは可能である。

      技術的にはそれが可能になりつつある。是非検討していただきたい。

    posted by すz at 19:32| Comment(2) | TrackBack(0) | 日記

    2010年12月09日

    TPI/PDI

    ATtiny10 などで新規に採用された プログラミングインターフェイス TPI(Tiny Programming Interface) を調べてみることにした。

    この TPI の基本プロトコルは XMEGA で採用された PDI と よく似ている。調べる際 PDI との違いについてもチェックすることにした。

    物理層



    TPI PDI
    リセット RESET x
    クロック TPICLK PDI_CLK
    データ TPIDATA PDI_DATA
    開始方法 (1) RESET を L
    (2) TPIDATA を H (1) PDI_DATA を H
    (3) TPICLK x 16 (2) PDI_CLK x 16
    (4) KEY送付 (3) KEY送付
    終了方法 RESET を H PDI_CLK 停止

    こんな感じ。データの送受信は 8bit + Parity EVEN + STOP2 が基本で、1本の DATA 線を TX/RX で 共有する半二重。

    • PDI は パリティを常に守るわけではなく パリティ を 無視する 特殊なデータがある。9bit + Parity NONE と思ったほうが しっくりする。

    • PDI は CLK を送付しつづけないといけない。これが扱いにくいところで FT232RL でライターを作ろうとすると エラーが起きたら最初からやりなおす -- みたいな処理が必要になる。(avrdude の terminal mode を愛用しているのだが、特に このモードと相性が悪い)

    コマンドセット


    TPI も PDI も 『FLASH に書く』といった コマンドがあるわけではない。メモリ空間に レジスタがあって プログラムとおなじようにレジスタにアクセスすることで、FLASH に書き込んだりする仕組み。

    コマンドセットは、次のようになっている。

      TPI PDI
      READ ( アドレス直接指定 ) SLDCS LDS
      READ ( ポインタ間接 ) SLD LD
      READ ( ポインタ間接 ++) SLD LD
      WRITE ( アドレス直接指定 ) SSTCS STS
      WRITE ( ポインタ間接 ) SST ST
      WRITE ( ポインタ間接 ++) SST ST
      ポインタ設定 SSTPR ST
      キー設定 SKEY KEY
      READ ( IO空間専用 ) SIN x
      WRTIE (IO空間専用 ) SOUT x
      READ ステータス SLDCS LDCS
      WRITE コントロール SSTCS STCS
      繰り返し指定 x REPEAT
      注) ++は ポストインクリメントつき

    完全ではないが、まぁこんな感じ。TPI には REPEAT がないが、空間が小さいから 必要ないのだろう。

    さて、コマンドを送れば結果が返ってくる(ものがある) 。そのときに 送信/受信が切り替わるわけだが、ガード 期間が定義されていて、一定期間(クロック)後から 結果を返すようになっている。

    この ガード 期間 最小 2 クロック。設定によって +128 クロックまで期間を長くすることができる。

      TPI は、それを設定する専用のレジスタがある。PDI は、コントロールレジスタで 専用のコマンドで設定する。

      なお、このコマンドセットは XMEGA では JTAG に (ほぼ)マッピングできるそうだ。

    ライタの設計



    TPI/PDI はこういうものなので、いくつかの空間に対して READ/WRITE するような メソッドをライタで提供し、あとは上位レイヤで やってもらう -- というのが 一つの案。

    avrdude-5.8 のソース(AVRISPmkII とかに XMEGA用のコードがある)を見てみたのだが、AVRISPmkII も 実際 そういう仕組みになっている。そして avrdude.conf に 各空間の 定義が書いてあり、その定義によって操作するようだ。

    もう一つの案として、物理レイヤーをそのまま見せる方法も考えられる。

    • TPI だと

        DTR : クロック送出
        RTS : リセット ON/OFF

        みたいな割り当てをする。で、TX/RX の 共有 をどうするか ... が問題だが AT90USB162/ATMEGA32U2 など コントローラで制御するなら 比較的簡単に 対処できる。

          外付け回路を付けるなら、TX の START BIT から 12 クロック 分 ゲートを開く .. みたいなのが良いかも。

          AT90USB162/ATMEGA32U2 だと PORT の設定をプルアップにしておいて、送信するときだけ TXEN(送信許可)を enable にすれば良さそう。RXEN(受信許可) については、自分の送信データを受信してチェックしても良いし、送信中は disable にしても良いかも知れない。

            追記: PDI では、受信時 プルアップではなく HI-Z にしなくてはならない。プルアップでは衝突検出に引っかかって動かない。(確認した)

          さて、XCK , TX/RX を割り当てるのは必然なのだが、RESET にはなにを割り当てたら良いのだろう? PORTD ならなんでも良さそうだが、過去に作ったボードもチェックして決めようかと思う。


      • 問題なのは PDI 。パリティエラーになるデータを扱っている。これはいったいどうしたものか。

        パリティエラーになるデータは 3 つで、BREAK(0xBB) / DELAY(0xDB) / EMPTY(0xEB) 。
        BREAK は、HOST が中断のために送出するデータで シリアルの SEND_BREAK にマッピングできる。(ちなみに TPI も BREAK があるが、シリアルの BREAK 信号そのもの )

        これがあるだけで、普通の シリアルにマッピングするのが難しい。JTAG インターフェイス にマッピングするのが妥当のような気がしてきた。

          追記: 上記の特殊キャラクタは JTAG のみの話だった。勘違い。TPI と同じでシリアルにマッピング可能。

        ただ、そういうのをわざわざ作っても 遅延の問題があるから あまり高速にできない。結局 メモリ空間を指定してブロック転送するもの を作るほうが 高速になりそうなのだ。

      USBasp の拡張案


      そう言えば ... USBasp のプロトコルにマッピングできないだろうか?

        USBasp にも メモリ空間に対してブロック転送する コマンドはあるのだ。

          SETLONGADDRESS -- 32bit のアドレスを指定
          READFLASH -- FLASH から読み込み (最大 200バイト)
          READEEPROM -- EEPROM から読み込み
          WRITEFLASH -- FLASH に書き込み (最大 200バイト)
          WRITEEEPROM -- EEPROM に書き込み

        SETLONGADDRESS は 32bit あるので、高位アドレスを使い 対象空間を変えることにすれば 多数の空間を扱える。それに FLASH と EEPROM の 2 つの空間も使える。

        EEPROM          FLASH
        TPI IO空間 全空間
        +コントロールレジスタ (0x80 ずらしてマップ)
        PDI コントロールレジスタ メモリ空間

        こういう空間マッピングが良いかも知れない。これなら 上記の コマンドセットの機能を全部使える。

        で、そういう動作にするモードを指定する には どうしたらよいのだろう?

          CONNECT -- TARGET と接続する。
          DISCONNECT -- TARGET を切り離す
          ENABLEPROG -- TARGET をプログラミングモードにする

        こんなコマンドがある。avrdude-5.8 の usbasp のコードを見てみたが、USBの CONTROL パケットの INDEX / VALUE は all 0 。CONNECT の コマンドで mode を設定すれば 切り替えるようなことはできそうだ。

          CONNECT で value_h を プロトコルバージョン とみなし 2 だったら value_l によって メソッドを変える。予定では 2 が TPI 3 が PDI (1 は ノーマルの別チャネルとか)

          という風にすることに決めた。

        ちなみに、その他のコマンドは次のものだけ。

          TRANSMIT -- 4バイトの ISPコマンドを実行する
          SETISPSCK -- BIT CLOCK を設定する。(通常 AUTO 指定)

        SETISPSCK はそのまま使う。TRANSMIT は サポートする必要はない。が、シグネチャー読み出しぐらいは、シミューレートしても良いかも知れない。それ以外にも プログラマ自身の設定を変えたり、ステータスを返したりする機能を仕込むとデバッグが楽になるかも知れない。


      ... というわけで、AT90USB162/ATMEGA32U2 に 移植した USBasp を改造してみようと思う。
      serjtag でやろうとも思ったが まだベースも動いていないし。

      ここまで書いた段階で、avrdude tpiでググってみた。

      • あ、LUFAに、AVRISP-MKII Clone が入っていて PDI/TPI をサポートしているのか。

      • 実装例のひとつが、USBTiny Mkii

        これを読むと、Avrdude 5.10 support for ISP, PDI and TPI と書いてある。

      • ほかに TPI bitbang implementationというのも投稿されているなぁ。最新版に入っているのだろうか?

      USBTiny Mkii は、AT90USB162/ATMEGA32U2 を使っているみたいだし、すなおに LUFA 使えば簡単そうではある。ただ libusb-filter 入れろとか ちょっと気になることが書いてある。

      まぁ、AVRISPmkII は 秋月で 3300円だから すなおに AVRISPmkII 買ったほうがお勧めではある。

      なんというか、使うより作るのが目的のようなものだから、この方針のまま検討を進めよう。ライタのファームウェアより avrdude での対応が 面倒で そっちの方が重要。-- なにはともあれ、avrdudeの最新版 5.10 を見てみよう。

      あと、デバイスをなんとかしなくては。XMEGA は 16A4 と 192D3 を確保済みだが、ATtiny10 は買えるのか?

        デジキーだと ATtiny10 のリードタイムは 1/12/2011 だそうだ。ATmega32u4のリードタイムも 1/23/2011 だし、この際 発注しておくか。


    追記: avrdude-5.10 をチェック

    avrdude-5.10を見てみた。観点は、どんな風に実装されているか。

    まず、flags に AVRPART_HAS_PDI , AVRPART_HAS_TPI が設定される。これを見て動作を切り分ければ良いようだ。

    また、AVRPART_HAS_PDI を見ているのは、jtagmkII.c と stk500v2.c のみ。さらに、AVRPART_HAS_TPI まで見ているのは stk500v2.c のみ。... どうも stk500v2.c だけチェックすれば良いようだ。

    で、stk500v2 は、次のメモリタイプがあるらしい。

    stk500v2_private.h:
    avrdude mapping
    XPRG_MEM_TYPE_APPL 1 "flash","signature"
    XPRG_MEM_TYPE_BOOT 2 "boot"
    XPRG_MEM_TYPE_EEPROM 3 "eeprom"
    XPRG_MEM_TYPE_FUSE 4 "fuse"
    XPRG_MEM_TYPE_LOCKBITS 5 "lockbits"
    XPRG_MEM_TYPE_USERSIG 6 "usersig"
    XPRG_MEM_TYPE_FACTORY_CALIBRATION 7 "calibration"

    stk500v2 は、こうなっているだけの話で、そういう風なメモリタイプの分け方をする必要はないらしい。

    avrdude.conf の定義はこんな風になっている。

    # ATXMEGA16A4
           :
    signature = 0x1e 0x94 0x41;
    has_jtag = yes;
    has_pdi = yes;
    nvm_base = 0x01c0;
    :
    memory "eeprom"
    size = 0x0400;
    offset = 0x08c0000;
    page_size = 0x20;
    readsize = 0x100;
    ;
    memory "flash"
    size = 0x00005000;
    offset = 0x0800000;
    page_size = 0x100;
    readsize = 0x100;
    ;
    memory "usersig"
    size = 0x200;
    offset = 0x8e0400;
    page_size = 0x100;
    readsize = 0x100;
    ;
    memory "signature"
    size = 3;
    offset = 0x1000090;
    ;

    offset や readsize が定義されているので、write はともかく read するのには苦労しなさそう。
    では、TPI のほうはどうなっているのだろう。

    # ATtiny10
    :
    signature = 0x1e 0x90 0x03;
    has_tpi = yes;
    :
    memory "flash"
    size = 1024;
    offset = 0x4000;
    page_size = 16;
    blocksize = 128;
    ;
    memory "signature"
    size = 3;
    offset = 0x3fc0;
    ;
    memory "fuse"
    size = 1;
    offset = 0x3f40;
    blocksize = 4;
    ;
    memory "calibration"
    size = 1;
    offset = 0x3f80;
    ;


    まぁ、同じような感じ。

    write は、それぞれのメモリタイプ毎の方法を知ってないといけないにしても usbasp 拡張への対応はあまり難しくないような気がしてきた。

    追記: コード作成中

    大分出来てきた。いろいろ分かってきたので訂正。

    • PDI の特殊コードのうち DELAY と EMPTY は単に無視すれば良さそう。そして残る1つの BREAK は、本当の BREAK と同じ扱いで良さそう。

      具合が悪いこともあるかも知れないが、たぶんタイムアウトでなんとかなる。

      ... そうなると 半二重 + 同期 という特殊なモードを作れば、シリアルのインターフェイスで対応できそう。 それはそれで面白いかもしれないが、とりあえずは、USBasp の拡張をやってみる。

    • TPI で NVM(FLASH など不揮発メモリの総称) に書くには、NVMCMD に WORD_WRITE を設定してから、SST で WRITE するようだ。チップイレーズは、NVMCMD に CHIP_ERASE を 設定して WRITE 。その後 ビジーフラグをチェックする。終わったら NOP を設定しておく。

      PDI も 似たような感じではある。が、機能が多い上に 領域毎に専用コマンドがあったりして すごく面倒。
      こんなのは、上位レイヤーの avrdude でやりたいのだが、ブロック書き込みだと ページ毎に NVMCMD を設定してやらないといけないので、なかなか厳しい。

    • TPI は 空間が 3 つあった。グローバルな空間 と I/O 空間 と コントロール・ステータス空間。仕方ないので、I/O 空間 と コントロール・ステータス空間 の 2つをアドレスで切り分けて もとの EEPROM 空間にマップすることにした。

      PDI では空間は グローバルな空間 と コントロール・ステータス空間の 2つしかないのだが、実を言うと NVM 制御用に 別の空間を定義したくなった。NVM 制御では、ポインターは使わないので、アクセス方法が違う。ただ、1 バイトアクセスが多いので ブロック転送よりは、ISP コマンドでアクセスするほうが効率が良さそうなのだ。なかなか悩ましい。

    • それはそうと、LUFA のコードは 参考になる。実際に動くコードというのは貴重だ。

    追記: コード作成中(2)

    コード作成がだいぶ進んで、テストに入れそうなぐらいになってきた。ちょっと難しかったところがあるのでメモしておく。


    • NVM_CMD

      FLASH とか EEPROM に書き込む時の手順が難解だった。マニュアルに載っているわけだが、よくわからなかったし、細かいことはやはり分かっていない。

      ページ単位で書き込める リソースには、EEPROM / FLASH(APP) / FLASH(BOOT) / USERSIG と FLASH(ALL) の 5 つがあるようだ。それぞれ NVM_CMD が違う。また FLASH(ALL) は、APP と BOOT のエリアを統一的に扱うもののように見えるが詳しくはわからない。

      これらの書き込みは、NVM_CMD は違うものの 手順 は同じようだ。

      手順はこんな感じ 。マニュアルの用語がわかりづらいので 自分流の用語にしている。

        (1) ページバッファ消去 (CLEAR_BUFF)
        (2) ページバッファへのデータのロード (FILL_BUFF)
        (3) ページ消去 (ERASE_PAGE)
        (4) ページバッファのページへの書き込み (WRITE_PAGE)

        この手順が書いてあるのだが、私には次の方が理解しやすい。

        (1) boot_page_erase (A) ページ消去 (ERASE_PAGE) (B) ページバッファ消去 (CLEAR_BUFF)
        (2) boot_page_fill ページバッファへのデータのロード (FILL_BUFF)
        (3) boot_page_write ページバッファのページへの書き込み (WRITE_PAGE)

        左のは、ブートローダでの自己プログラミングの関数で、この手順だと同じようなことをしていると理解できる。


        EEPROM APP BOOT USERSIG (FLASH)  trigger poll
        (1A) ERASE_PAGE 0x32 0x22 0x2A 0x18 0x2B SPM NVMBUSY
        (1B) CLEAR_BUFF 0x36 0x26 0x26 0x26 0x26  NVMEX NVMBUSY
        (2) FILL_BUFF 0x33 0x23 0x23 0x23 0x23 SPM
        (3) WRITE_PAGE 0x34 0x24 0x2C 0x1A 0x2E SPM NVMBUSY

        NVM_CMD はこのようになっている。CLEAR_BUFF / FILL_BUFF については EEPROM だけが違う。

        (2) の FILL_BUFF で実際に書くデータを埋めていく。SPM と書いてあるのは、PDI で ページがあるアドレスに対して Write する操作。FILL_BUFF だけがデータに意味があり、他は Write でアドレスのみが意味がある。

        さて、こんな風に リソースによってコマンドを切り替えないといけない。結局 stk500v2 のようなメモリタイプの定義になってしまった。残った(書き込む)リソースは FUSE と LOCKBITS のみ。これら は、上記のk記法で書くと

        FUSE LOCKBITS trigger poll
        o WRITE 0x4C 0x08 SPM NVMBUSY

        こう。NVM_CMD をセットして PDI で Write 。


    • USBasp とのインターフェイス

      いろいろ試行錯誤した結果こうなった。


          メソッド 型
      (NEW) ops.pgm_poll (void (*)(void))
      ops.pgm_disconnect (void (*)(void))
      ops.pgm_transmit (void (*)(uchar *, uchar *))
      ops.pgm_enable (uchar (*)(void))
      ops.pgm_read_space0 (uchar (*)(uint16_t))
      ops.pgm_write_space0 (uchar (*)(uint16_t, uchar))
      ops.pgm_read_space1 (uchar (*)(uint32_t))
      ops.pgm_write_space1 (uchar (*)(uint32_t, uchar, uchar))
      (NEW) ops.pgm_blk_start (void (*)(uchar, int16_t))
      (NEW) ops.pgm_open_page (uchar (*)(uint32_t, uchar))
      ops.pgm_close_page (uchar (*)(uint32_t, uchar))

      • (NEW) と書いてないものは、想定どおりで 従来の ISP用メソッドと 1:1 のマッピング。

      • pgm_poll はなんとなく付けたものでつかっていない。pgm_open_page は、page_size が分かれば必要ないのだが、pgm_close_page と対になるようにした。pgm_close_page は、ISP だと ispFlushPage にマッピングされる。

      • pgm_blk_start というのが純粋な新規インターフェイスなのだが、やっぱり事情がある。PDI は、REPEAT 命令があるから これから何バイト分 アクセスされるのか知っていたほうが都合が良い。最初は ブロック READ/WRITE のバイト数だけを引数にしていたのだが、この値は普通 200 で ページサイズとは無関係。上記で説明したように ページの切れ目で REPEAT を解かないといけないことに気づいたので、ページサイズも引数にした。

        ちなみに、pgm_read_space0/pgm_write_space0 は、もとは EEPROM 。これを 0x8000 のビットが立っていれば コントロール・ステータス空間 そうでなければ IO空間(PDI では レジスタがある下位アドレスに対するダイレクトアクセス) に割り付けた。
        pgm_read_space1/pgm_write_space1 はもとは FLASH で、全メモリ空間(PDI ではポインタによる間接アクセス)としている。

        さて、NVM_CMD の コマンドセットを切り替えなければ 書き込めないのだが、どうやって切り替えるか。
        いろいろ考えたのだが、pgm_transmit を使うことにした。ついでなので、ISP コマンドとの互換コマンドも少し取り入れて次のようにした。

        0x30 READ_SIGNATURE
        0xc0 WRITE_EEPROM
        0xa0 READ_EEPROM
        0xf0 CHK_BUSY
        0xac ISP_CONF - 0x80 CHIP_ERASE
        (PDI) 0xac ISP_CONF - 0x01 SET_SPACE
        (PDI) 0xac ISP_CONF - 0x59 RESET

      • READ_SIGNATURE は、まずは知りたい情報だから入れた。WRITE_EEPROM/READ_EEPROM は 上記の space0 への read/write と同じ機能。1 バイトアクセスが多いので こっちの方が使いやすそうだと考えた。 CHK_BUSYは、上記の NVMBUSY のチェック専用。ついでなので CHIP_ERASE も入れた。

      • PDI 用の新規コマンドの SET_SPACE は、上記 NVM_CMD コマンドセット切り替え。RESET は、RESET ON/OFF 用でリセットラインの機能。

      • FUSE と LOCKBITS までサポートするのは、面倒なのでやめた。コマンドを組み合わせて 上位レイヤで実装する。

    • 半二重 同期通信

      TPI/PDI で共通にすることにした。ベースは ゆきさんの R8Cプログラマ 随分変えてしまったが、基本は踏襲。もともと半二重通信を意識したコードだったので 都合が良かった。実をいうとまだ動くかどうかも分かっていないのだが、現状のやりかたをメモしておく。

      • 同期通信

        マニュアルみてもなかなか分からなかったのだが、同期通信 の 速度の設定 は SPIマスタと同じだそうだ。U2X1 は 無意味 -- ではなく 0 に設定する必要があるらしい。

        あと、UCPOL1 は 1 にするはず。これで、XCK からクロックが常時出るようになるのだろうか? 期待通りに 非同期通信のパラメータが効くのだろうか? 不安があるが.. まだテストしていない。

      • 半二重 処理。

        バッファ切り替えの出力も付けたいので完全な 半二重 処理 が必要になる。

        送信と受信が同時に enable されないように UCSR1B を次のように設定している。

        受信モード UCSR1B = (1<<RXEN1)|(1<<RXCIE1);
        送信モード UCSR1B = (1<<TXEN1)|(1<<TXCIE1)|(1<<UDRIE1);


        送信モード になるのは、最初にデータを送ったとき。送信完了割り込みで 解除。
        次々にデータを送る場合は、送信データ空き割り込みで 送られるので、送信完了になるのは、全部データを送信し終わったとき。

        送信を disable にしたとき 通常ポート動作に切り替わるが、pull-up モードにしておけば 問題なさそう。

        正しくデータを送ることができたならば、全部送信が終わらないと データを送ってこないはず。... これもちゃんとは確認してない。

      • その他の処理

        あとタイムアウトを入れている。データを送ってこないようなら エラーになるようにしている。これはベースと同じように 10ms タイマ割り込み。NVMBUSY のタイムアウトもあるので、タイムアウトのタイマー変数は 2 つ作っている。

        気になるのは、受信バッファ溢れ。REPEAT 命令があるからといって REPEAT 数を増やすと どんどんデータが送られてきて 溢れる結果になりそう。REPEAT 数 は 受信バッファのサイズと 同じにしておいた。

         - EMPTY とか DELAY の特殊データも 受信してしまうと 受信バッファが溢れるので、無視することにしている。
         - ただし、BREAK や 本当の受信エラーは 受け取りたいので バッファは 16bit 幅。

        ... といってもこれまた未テストで 少々不安。バグなら直せばよいが、仕様を読み違えていると 一気に不可能になるおそれがある。


    追記: ここまでの ソースコード (もちろん未テスト)

    • usbasp.c (テキスト)
    • usbasp.h (テキスト)
    • angel_loader-1.1f.zip AT90USB162/ATMEGA32U2 ファームウェア


    • avrdude-5.10 の usbasp を いままで説明したプロトコルに対応させてみた。未テストで、これをデバッグするのだ。

      従来互換で、PDI/TPI のチップでは、切り替わるようになっている。

      ファームウェアの方も PDI/TPI 用のポートは切り替わる。

        PD2(RX)/PD3(TX)/PD5(XCK) と TPI 用の RESET に PD0 を使う。あと PD4 を バッファ制御用に使えるようにしている (L: TX / H : RX)。

      だが、ISP の場合も USART の SPIマスターモードを使ったほうが 良さそうな気がしてきた。

      ちなみに、正規の 6pin ISP コネクタは とっても適当なアサインになっている。
      AVR042(pdf) を見ると次の配置。()内は 割り当て案

      ISP TPI PDI
      (RX) MISO VCC (RX+TX)DATA VCC (RX+TX)DATA VCC
      (XCK) SCK MOSI (TX) (XCK)CLK N.C. N.C. N.C.
      (PD0) RESET GND (PD0)RESET GND (XCK) CLK GND

      TPI はまだ 良い。PD4=L で TX を RX に ミックスするようなもので 十分対応できる。
      PDI はそれに加えて XCK を PD0 に ミックスする別の制御線が必要になる。そして、PDI のとき PD0 は HI-Z にしておかなければならない。

      それに加えて、MOSI が N.C. にできてない。これも制御する信号線が必要なのだろうか? ... PDIの CLK が TPI の CLK の位置だったら 良かったのに。

    追記: コードデバッグ中(1)


    (pdi_base.alc : LAP-C ファイル)

    シバ某のログ:実験結果小まとめ(TXT)も参考にして いろいろやって、ようやく 思ったようなコマンドが出せるようになった。ロジアナがないとデバッグは厳しい。買ってよかった。ちなみに、ソースコードは随分変わった(公開は別途)。

    ターゲットには、XMEGA16A4 を使っているのだが、まだ XMEGA16A4 からの受信は成功していない。


    • 買ったロジアナの使い方すらよくわからなかったのだが、シリアルのデータ を出すには、BUS に信号を入れて BUS Proparty で設定することがやっと分かった。
    • クロックは 250kHz にしているが、TPI の ATtiny10 ですら 2MHz まで OK 。PDI だと 10MHz までいけるが、むしろ最低周波数 (10kHz) をクリアしないといけない。ロジアナの設定は、Find the baud ... にチェックすればよいらしい。 bps のところに数字を入力すればよい。
    • クロックはちゃんと出せていて、ちゃんと 立下りで 信号を切り替えている。
    • USART の同期モードでもちゃんと START BIT/STOP BIT が出ている。-- 未確認だったので、これすらできるか不安だったのだ。もう不可能ということにはならない。デバッグするのみ。
    • 送信は C1 59 81 と連続で出せているが、割り込み使ったバッファ処理は うまくいかなかったので、ポーリングに変更している。

    追記: コードデバッグ中(2)

    • usbasp.c (テキスト)
    • usbasp.h (テキスト)
    • angel_loader-1.1h.zip (ファームウェア)
    • avrdude-serjtag04i.zip (usbasp 改造版 含む )


      (isp_base.alc : LAP-C ファイル)

      ISP の PORT を SPI から USART SPI に切り替える ISP2 というのも作っていて これは完成した。usbasp も対応して -c usbasp2 と指定すると チャネルを切り替える。TPI/PDI は どちらでも良いことにした。

      ただ、PDI のテストは進んでいない。ターゲットを 以前作った XMEGAボードにしようと思い製作中。

    追記: コードデバッグ中(3)


      (pdi_test-bad1.alc : LAP-C ファイル)

      なんだかうまくいっていない。これは、ガード期間を短くしたときのもので 設定したガード期間を読みだそうとしたデータ。なぜかクロックに同期したデータが来る。

      で、いろいろしらべてみると、XMEGA には衝突検出のロジックがあって、値が 変化するときだけ出力するらしい。プルアップしてたので、XMEGA が ..00.. を 出力しようとしたらこれに引っかかる(はず)


      (pdi_test-bad2.alc : LAP-C ファイル)

      で、XMEGA が送信するタイミングでは HI-Z にするようにしたら L レベルになってしまう。



      ただちょっとうまくいきかけたこともあったのだ。なにか値を返そうとしている。が、1 回限りで 値もおかしい。

      ... 今思えば、pull-up してたから 途中で衝突検出にひっかかったのだと思う。...そうなると XMEGA を壊してしまったとか?

      ところで、TPI のほうにも衝突検出がある。こちらは、内部で pull-up して L レベル と Hレベルの最初のクロックだけ出力。PDI と同じように 受信モード(ターゲット送信)時は HI-Z でも良いし、単に pull-up しても良い。-- こっちの方が嬉しいが、それだとクロックを上げられないのだろう。

      ... それはともかく、だいぶ嫌になってきた。気分転換に LUFA のコードを見たりしてみようと思う。

      • やはり、pull-up は使わず 出力・入力 のどちらかにしていた。
      • 送信する場合は、DATA を H にしてから、1 clock 待っている。(↓↑)
      • 受信する場合は、送信完了を待ってから受信にし、その後で TX を HI-Z に している。

    追記: コードデバッグ中(4) -- signature まで確認

    • angel_loader-1.1i.zip (ファームウェア)


    • KEY を送り、PDI_CS_STATUS を READ したところ。OK なので enable 完了

    • シグネチャの最初の 0x1E を読んだところ。
      (pdi_test-ok1.alc : LAP-C ファイル)

      シグネチャ読み込みまで確認できた。XMEGA が壊れたかと思ったが、電源かケーブルの接触の問題だったようだ。

      変更点はよくわからなく... 。もちろん 受信時には、HI-Z にした。あと 受信エラーになったら 次に送信モードにするときに BREAK を送るようにした。(1 回しか 戻ってこないのは、BREAK を送っていないせいだと思うので)。

      これで基本的な通信は OK 。デジアナはもう必要ない。

      (メモ)
    • 受信モードで終わるようにしているが、両者 HI-Z にしているのでマズそう。むしろ受信が終わったら、送信モードにした方が良い。後で直さないと。
    • BREAK はコード入れただけで未検証これも要確認。
    • 1MHz 以上で動作を変えているところがある。これも要検証。
       - TX か RX のどちらかを enable しないと CLOCK が出ないようでバグってた。
    • 最低クロックをあまり低くすると timeout が長くなって デジアナで見にくいので 250KHz にしている。最大クロックは、4MHz (16MHz の場合 8MHz) だがもちろん未検証。
    • せっかく USART 版を 作ったのだが、PORT で制御したい理由があった。これもつくらなくては。

    追記: コードデバッグ中(5) -- read ができるようになった。

    • angel_loader-1.1j.zip (ファームウェア)

      read 自体はすんなりできるようにいなったのだが、どうも値がおかしい。よくよく見ると 0x90 のところにシグネチャが見える。

      で、首を傾げていたのだが、原因が分かった。LD 用のポインタを設定するときに 3 バイトのモードを使っていたのだが 上位バイトになにか設定されているようで、違うところ --シグネチャがあるところを READ してたらしい。4 バイトをちゃんと設定するようにしたら OK になった。

      NVM_CMD には、どうも READ_NVM(0x43)を設定すれば良いらしい。よく分からなかったのだが、LUFA のコードをまねしてみたら OK になった。ただ READ ができるようになったといっても正しいかどうかは、未だ分からない。WRITE できるようにならないと。

      さて、SOFT モードはどうしよう。... これは以前作ったボードが XMEGA ボードに付くようにしたのだが、PORT しか割り当てていないので、急遽つくることにした。

      • idle のとき タイマー割り込みで、クロック出しておけば良さそう。シリアルといっても SPI みたいなものだから、通信するときは同期でいける。問題はタイマー割り込みの頻度。-- 今は 250Hz にしているが.. 64 倍の 16KHz にするか。



    追記: コードデバッグ中(6) -- SOFT モード ができるようになった。

    • angel_loader-1.1k.zip (ファームウェア)


      (pdi_test-soft.alc : LAP-C ファイル)

      32kHz で割り込みを発生させて 送受信する SOFT_PDITPI が動いた。これで適当に PORT を割りあててしまったボード で書き込むようなこともできるはず。

        上記の画像は、REPEAT 命令を使って 32 バイト連続で読み込もうとしているところ。期待通りに動くようになった。

        ところで、PDI サポートでの通信部分は yukiさんのコードを使わせてもらっていたのだが、デバッグが進むうち書き換えが進んでほんのわずかになってしまっていた。結局これも書き換えて 全部自分のコードにした。

      ただ、書き込みのテストは完了していない。今の状況は、なんとか ページの一部が書けるようになったところ。 flash, boot, application , と usersig は、ページサイズが 256 バイトだが 2 ページ目の 0x1fe からの 2 バイトが書けていない。途中 0xff のデータを使ったのでどこまで書けたかも分からない。eeprom のページサイズは 32 バイト。これも 2 ページ目から書けていない。

      こんなところだが、まぁなんとかなるだろう。

      ところで、chip erase で FLASH , EEPROM は初期化されたのだが usersig は初期化されなかった。一応 write_byte で書き込むと section erase するようなオペレーションを付けておいた。これは、terminal mode で 1 バイトだけ書き込む操作で使える。本当は 1 バイトの書き換えだが エラーにするかわりに 消去する仕様にした。で、問題は usersig の消去をいつやるか。とりあえず eeprom , boot, application, usersig は paged_write のときに write_byte 使って消去することにしている。(都合が悪そうなら変更する)


    追記: コードデバッグ中(7) -- tiny10 入手。TPI もテスト中。

    tiny10 を手に入れたので、テストしてみることにした。TPI などちょろいだろうと思ってたが、まだ書き込みができていない。ロジアナでみているが、シーケンスは正しそうなのだが、書かれない。ひょっとして、3.3V 電源しか使っていないのが原因? (TPI は 5V)

    ちなみに、nega32u4 も同時に入手したので、対応中。一応は動いているのだが、USB の認識に失敗することが多い。(認識されればちゃんと動く)
    posted by すz at 22:02| Comment(0) | TrackBack(0) | 日記

    2010年10月24日

    taobaoでジャンク基板

    ちょっと妙なものを見つけてしまった。



    これは、ここで売っている Jz4725(無印)搭載の PMP の基板で製造途中のもの。なんと 23元(16円換算でも 368円!)。taobao だから 代行業者を通さないと買うのが難しいし、単体で 1 個だけ買うわけにも行かないのだが...

      jz47xx は、中国 Ingenic 社が作っている MIPS32 互換の CPU で 360MHz で動作する。中国の製品では珍しく Linux や ブートローダー ツールなどの ソースコードが公開されている。現行のCPU は、PMP用では Jz4755 と Jz4725B で Jz4725 は 旧製品。

      推測だけで書くが、安PMP も Jz4725 から Jz4725B/Jz4755 に切り替わっているようだ。Jz4725B はピン互換で性能も同じなのだが、ソフト見えでは互換性がなくなってしまっている。Jz4725 には新しいファームウェアが供給されないから 載せてしまったボードは使い道がないのだろう。

      ただ中国本国でどれだけ格安なのかは想像できない。なにしろ、まともなメーカーが作った jz4755 が載った PMP の製品が 150元ぐらいからある。LCD,バッテリー,FLASH(4G),RAM が載ってこの値段だから CPU だけのボードなら 50元以下の原価かも知れない。

    SDRAM も FLASH も載っていないが、usb からブートできるし、SDRAM さえ載せれば 動きそうな感じ。
    SDRAM も持っているし、ちょっと試しに買ってみようかと思っている。

      Jz4725 の データシートやプログラミングマニュアルは入手済み。usb からブートするツールや Linux のソースコードも公開されていて入手済み。-- 壊れてさえいなければ使えるはず。

      追記: 代行業者で見積りを取ってみたが、買えなかった。残念。
      写真はサンプルで、同じものとは限らないようだし。諦めよう。


    まぁジャンク基板をわざわざ買わなくても、マジカル上海の Neo Slim 3000 が 1999円のセール中で、こちらのほうがおすすめ。(データシートがないが)液晶 や バッテリー, FM ラジオモジュール取りで元がとれそうな値段にまで下がっている。

      入手できた。
    • バッテリーが放電してしまっている。バッテリー自体に過放電保護があるし、充電も専用IC だから 普通に使える状態になると思う。
    • ファームウェアも 古いようだ。試しに使ってみるなら ここから V1.7 をダウンロードしたほうが良いかも。

    これはこれで予備に買い増ししておくと思うが ...ジャンクを再生して電子工作に使えるなら、それはそれで楽しいかも知れない。

      ... とは言え、液晶つないでPMPに仕立てるのでは意味がない。-- すなおにPMP買ったほうが安く付く。
      Linux もあるが、Jz4725 と Jz4725B では大分違う。Linux を動かそうとしているのは Jz4725B のほうで、Jz4725 でがんばろうとはあまり思っていない。

      こいつには、電子工作で役に立ってもらおうと思っている。Linux の移植などしなくとも、AVR でやっていたレベルのプログラムは usb からロードして動かせる。

      すくなくとも 使える I/O は、I2C と 16bit PWM 2 つ(I2C と排他)。 あと LCD 用のピン 16 + 4ぐらいを GPIO として使える。当然ながら 既に付いている サウンド出力や MicroSD も 使える。マイクと FM モジュール用の LINEIN も大丈夫だろう。ボタンも付いているが、自由に使えるかどうかは不明。PIN 不足のため大概凝った実装になっているので、解析しないと無理。ちなみに、MicroSD は SPI ではない。SD の 1bit インターフェイスで使えるようにするのは骨かも知れない。

      裏面に液晶接続用のパッドがあるはずで、液晶サイズは、2.8inch 〜 3.2 inch ぐらい? ならば 0.8mm 〜 1mm ピッチで 36pin 〜 44pin のものだろう。( 0.5mm ピッチでコネクタが必要だと、コネクタの高さがあるから、コネクタが表面に来るはず。)

        液晶コントローラの接続は 2 通りある。HYNC/VSYNC を使うLCD接続と コントローラを使う SLCD接続。どちらの接続かかわからないが、データ線 16bit 分と HSYNC(RS)/VSYNC(WR) は確実に使う。たぶん SLCD接続 で、RESET/CS に割り当てた GPIO として使える。

      シリアルの Tx はたぶん空いている。.. のだが線が引き出せないかも知れない。Rx も内部用の PWM に使われてしまっているかも知れない。シリアルはあてにしないほうが無難。

      そのかわり、USB が通信に使えると思う。ツールのソースもあるし Linux のドライバソースもあるから使い方は分かる。AT90USB162 で作ったのを移植したりすれば大丈夫だろう。

      スタンドアローンで使うには、少なくとも NAND FLASH を付けなくてはならない。FLASH は、使わなくなった eeePC 用の SSD とか 時代遅れになった PMP から取れるのだが、0.5mm ピッチのハンダ付けには自信がないし、すなおに PMP 使ったほうが楽そうなので そこまでしないかも。

      一応 バッテリー充電専用 IC は付いているように見える。5/6 pin の IC は 4 つ載っていて、コイル付きが 2 つ。コイル付きは、core 用 1.8V と LCD 昇圧用。残りが 2 つもあり、ひとつは 3.3V 用としてもあと 1つ余る。余るなら バッテリー充電専用 IC のはず。-- もう見方をマスターしてしまった。
      ただ、バッテリー周りは、満充電センスと 外部電源があるかどうかのセンス、あと場合によっては、外部電源時のバッテリー使用ストップとかのスイッチがあるはずで、それらを解析しないといけない。

      スピーカーも付くものだと思うが、8pin の IC が見えない。ひょっとしたら裏面かも。



    こっちは、同じところで買える RK2706 の 基板で 22元。SDRAM は載っているものの FLASH がない。ただ、FM ラジオモジュールが付いている。

    RK2706 は良く知らないので使えるような気がしない。.. のだが 使いこなせる人もいるかも知れないので、ついでに紹介。

      RK2706 のデータシートぐらいは入手できているのだが、boot の仕組みがいまいち分からない。
      boot できなければ、ただの部品取り用ジャンクにしかならないし。




    ちなみこんなのもある。これは、Jz4740 の CPU 基板で こことかで 270元で売っている。

    全ピンを引き出しているので、USB-HOST とか 全機能が使える。PMP ベースより自由度が高い。

    2011/09/22 追記

    タオバオ新幹線』というところを見つけたのでアレコレ買うついでに買ってみることにした。

      以前 別のところで見積もりしたときは、あっさり無視されたが、一応交渉してくれたようで 6 個 買えることになった。

      ( 23 元 x 6 + 中国送料 10 元 ) x 14.0(レート) = 2072円
      + 国際送料 600g 分

      これで、なにかちょっとでも遊べたら、安い買い物だと思える。

      ちなみに、写真のとおりのものが来るとは限らない。あとメモリも Nand Flash も付いていない。まともな品なら SD-RAM を付けるだけで、動かせるはずなのだが...

      それはともかく、電子部品でも 躊躇しないで代行してくれるようだ。

      ちなみに他のアレコレとは ...
    • Jz4755 CPU Chip 21 元
    • 4.3 inch タッチパネル液晶 58 元
    • 5 inch タッチパネル液晶 85 元
    • 紫光 T816 (Jz4755 PMP) 145 元
    • IQQ M1 (5 inch MIPS Android) 369 元

      Jz4755 CPU Chip は、0.4mm ピッチでちょっと手に負えそうにないのだが、買えなくなるかも知れないので一応確保。いつかボードを作ってみたい。タッチパネル液晶は、40pin で aitendo の これのタッチパネル付きと たぶん互換。紫光 T816 は、Jz4755 の開発用。付属品なしなら 135元まで安くなる。IQQ M1 は、MIPS Android 。少々もっさりのはずだが、サスペンドでバッテリーが持つのが売り。(ちなみに、デザインがスマートになった IQQ M2 がそろそろ出るのでお薦めかどうかは微妙)。これは、開発用でなく持ち歩いて使ってみたい。

      9/30 追記: 上記が届いた。

      まずは、主題のジャンクボード。これは、写真のものが届いた。基板の周りの捨て基板?がついたままで、明らかに未使用。問題は生きているかどうかだが、USB コネクタに一番近いボタンを押しながら USB に差し込むと USB Boot になり ドライバを要求された。SD-RAM も NAND-Flash もついていないが USB Boot にはできるのだ。(USB boot は、ROM で動作し 32kb のキャッシュにブートローダをロードする)

      CPU は、Jz4725 無印。USB boot で動かしてみるだけなら SD-RAM をつければ良いはず。スタンドアローンで使うためには、NAND-Flash もつけないといけない。

      基板の裏には、よくある 37pin ? の液晶のパターンが付いている。ただ、液晶をつなげるのなら、最初から PMP を買ったほうが安い。なにしろ Jz4725B の PMP が100元であるのだ。

      一応、これは電子工作で使うつもり。信号線は、FMラジオのパターンから I2C,Line-in , 液晶のパターンから 数十本の GPIO が取り出せる。

      Jz4755 CPU Chip も入手はできた。だが、板にテープで貼ってあるだけのような ... これでなにか作ったとしてちゃんと動くかどうかは不安。-- ただのコレクションになってしまいそうだ。

      紫光 T816 は、Jz4755 でなく全然違う CPU かも。見慣れた画面ではなかった。中国語と英語しかサポートしておらず OS も全然違うようだ。T816 も 見慣れた画面のものがあるはずなのだが... どうもハズレらしい。

      IQQ M1 は、期待通りのもの。だが、ここでは詳細は書かない。

    2012/10/14 いまさら追記

      ジャンク基板だが、よく見たら SDRAM と NAND FLASH を外した痕跡がある。その際に 一部の CR が取れてしまっているようだ。取れて違うパーツにくっついたものもある。また、SDRAM と NAND FLASH にブリッジが見られる。USB に接続する前に ブリッジだけは取り除かないと危ない。

      取れたパーツは、数個で 1608 の 抵抗/コンデンサ。ちなみに、その近くに バッテリー充電IC のパターンがある。空きパターンなのかついでに外したのかは判別できない。回路的にはたいしたことがなさそうなので、RD を参考に復元しないと。

      これについては、記事を起こすかも。
    posted by すz at 13:28| Comment(0) | TrackBack(0) | 日記