2011-03

2011-01← →arm_blaster →ARM armon stm32f103 AVR/PIC両用ライター usbシリアル変換  usbキーボード  簡易ロジアナ、赤外線リモコン信号観測 mapleIDE


3月:  2月はどこいったの?

  • 思いっきり逃げられました。


  • というか気づいたら3月


先月のまとめ

  • (1)STM32をストレージデバイスにして、Seagate外付けドライブに見立てるようなフェイク。 --->しっぱい
  • (2)いまさら感はあるけれど、STM32でビデオ/RGB出力の実験をやってみるテスト。
    • さぼり



今月のテーマ:

  • 気が向いたらLPC1114でmaple IDE

もくじ






STM32 Value Line Discovery (2) -- FM 音源プログラム「TGSTMVL」

シンセ・アンプラグドさん

一説によると(STM32VLは)maple IDE用にもいいかもしれない。

  • けれどST-Linkは全く使う気ゼロなので外付けのUSBシリアルが必要だ。





小ネタ 2011-006

Nintendo 3DSを分解して調べてみる

  • http://www.kako.com/neta/2011-006/2011-006.html
  • ふーん、カートリッジ形状はDSiなんかと同一なんだ。
  • すでにマジコンもあるらしいけれど、こんどはどうやってARMのブートエリアの暗号キーを解析したんだろう。
  • 実は3DSはそこだけしか興味が無い。3D画面は目に悪い。





インテル商法

  • (インスタントコーヒーみたいに)違いが分からない男なのでメモ
Core i7とCore i5の差3次キャッシュを1MB無効化(4MB→3MB)
Core i5とCore i3の差ターボ・ブーストを無効化
Core i3とPentium Dual-Coreの差ハイパー・スレッディングを無効化
Pentium Dual-CoreとCeleronの差3次キャッシュを1MB無効化(3MB→2MB)
  • 全く同一デザインのコアをイネーブラーで差別化して商品系列を作り、値段差をつけて売っている。
  • もちろん最高クロック数選別でも選別しているので、差別化項目はイネーブラーだけではないが。
  • 過去のCorei7とi5(の600番台)の差は、内蔵ビデオチップの有無だったような。
    • (i5の下位機種のほうだけ2coreでビデオ内蔵)
  • 仮想化支援Hardware Virtualization(Hyper-V)やD.E.P.のイネーブルとかどうなってんのかな?





入試投降投稿問題:入試問題質問「はてな」だけ投稿されず─犯人の手がかり?

Bogus News


  • 入試投稿問題に関する試験私見

その1:

  • 入学試験中に限らないなら、実際の仕事場、自宅などでインターネット検索やGoogle先生に頼りっきりで仕事(あるいは勉強)している奴らは山のように存在する。(自分もその一人だ)
  • もはや、仕事スキル≒(Googleなどに頼る)検索スキルになってしまった感がある。
  • ならば受験現場でもインターネット端末を導入して(ry

全く、Google先生が地球から居なくなったらどうすんだろね?、この人達。何も考える能力無いよ。

  • つまり、Google先生がこういえば正しい、というわけで、検索結果を意図的に偏らせることで世界制服すら可能に・・・なるわけだ。


  • その投稿した人は串とか使わなかったのはなんでだろうね。あそうかガラケーには串なんか刺せないか。IP特定されて入学取り消しになるのは普通誰でも予測可能だと思うけど・・・。そうでもないのか aicezukiの謎:池田信夫blog


その2:

  • フェアプレイの精神で言えばカンニングはアウトだけど、ほかの抜け道はどうなんだろうね?
  • スポーツではドーピングとか発覚したら入賞取り消しでしょ。
  • 携帯電話の使用を監視するのも必要かもしれないけれど、そのまえにドーピング検査とか、人体改造検査とかもいるんじゃなかろうか?

まあ、今のところ、筋肉増強の薬はあるけれど頭を良くする薬とか記憶力を高める薬はないからいいのかな?

改造人間は無理としても、相手の思考を読む能力や手段があるならカンニングしほうだい、だよね。

  • 現実にクイズ対決では、IBMのwatsonが人間に勝ってしまったわけだから、
  • クイズ番組に出演した人が、脳に埋め込んだイヤフォンとマイクを使って、外部のデータベースを参照して有利に戦うことなどはもはや現実になってしまった。





leaflabs:libmaple

  • 最新版はgitから入手できる。

libmaple

$ git clone git://github.com/leaflabs/libmaple.git

dfu bootloader

$ git clone git://github.com/leaflabs/maple-bootloader.git

解説

  • libmaple/usb/usb_callback.c: 53行目くらい
/* we could get arbitrarily complicated here for speed purposes
  however, the simple scheme here is to implement a receive fifo
  and always set the maximum to new bytes to the space remaining
  in the fifo. this number will be reincremented after calls
  to usbReceiveBytes */

void vcomDataRxCb(void) {

 /* do whatever after data has been received from host */

 /* setEPRxCount on the previous cycle should garuntee
    we havnt received more bytes than we can fit */
 newBytes = GetEPRxCount(VCOM_RX_ENDP);
 SetEPRxStatus(VCOM_RX_ENDP,EP_RX_NAK);
 /* todo, not checking very carefully for edge cases. USUALLY,
    if we emit the reset pulse and send 4 bytes, then newBytes
    should be 4. But its POSSIBLE that this would be violated
    in some cases */
 /* magic number, {0x31, 0x45, 0x41, 0x46} is "1EAF" */
 char chkBuf[4];
 char cmpBuf[4] = {0x31, 0x45, 0x41, 0x46};
 if (reset_state == DTR_NEGEDGE) {
   reset_state = DTR_LOW;
   if  (newBytes >= 4) {
     unsigned int target = (unsigned int)usbWaitReset | 0x1;
     PMAToUserBufferCopy(chkBuf,VCOM_RX_ADDR,4);

     int i;
     USB_Bool cmpMatch = TRUE;
     for (i=0; i<4; i++) {
         if (chkBuf[i] != cmpBuf[i]) {
             cmpMatch = FALSE;
         }
     }

     if (cmpMatch) {
         asm volatile("mov r0, %[stack_top]      \n\t"             // Reset the stack
                      "mov sp, r0                \n\t"
                      "mov r0, #1                \n\t"
                      "mov r1, %[target_addr]    \n\t"
                      "mov r2, %[cpsr]           \n\t"
                      "push {r2}                 \n\t"             // Fake xPSR
                      "push {r1}                 \n\t"             // Target address for PC
                      "push {r0}                 \n\t"             // Fake LR
                      "push {r0}                 \n\t"             // Fake R12
                      "push {r0}                 \n\t"             // Fake R3
                      "push {r0}                 \n\t"             // Fake R2
                      "push {r0}                 \n\t"             // Fake R1
                      "push {r0}                 \n\t"             // Fake R0
                      "mov lr, %[exc_return]     \n\t"
                      "bx lr"
                      :
                      : [stack_top] "r" (STACK_TOP),
                        [target_addr] "r" (target),
                        [exc_return] "r" (EXC_RETURN),
                        [cpsr] "r" (DEFAULT_CPSR)
                      : "r0", "r1", "r2");
         /* should never get here */
     }
   }
 }

 PMAToUserBufferCopy(&vcomBufferRx[0],VCOM_RX_ADDR,newBytes);
}
  • DTRがNEGATEされているときに"1EAF" (leaflabsの頭文字?)という文字列が来たら
  • usbWaitReset()関数 ( 論理or 1 しているのは ThumbステートのPCを指したいから)
  • へ例外リターンするようになっている。

それでいいのか?

  • firmataのようなスケッチでPCと仮想COMで通信中のときは"1EAF"はスケッチ側がゲット済みしてしまう可能性が高いのではないだろうか。
  • そうするとDTRリセット出来ない。
  • 試してないのでなんともいえない。

自分が考えた方法は、ボーレート設定で 0x1eafのような特別なボーレートが設定された ときに仮想COMのデータを横取りしてリセットとかいろいろ出来るように・・・。


  • リセット関数はこれらしい。
    void usbWaitReset(void) {
     delay(RESET_DELAY);
     systemHardReset();
    }
  • やっぱりブートローダーはDFUなのか?・・・
  • DFUは全部コントロール転送なので、64kB/秒(64byteパケット/1フレーム=1mS)より速くは出来ない。
  • USB仮想シリアルにすればMB/秒くらいの転送は可能。Flashの書き込み待ちは置いといて。
  • もちろんRAMに転送するなら書き込み待ちは要らないけれど、RAM自体そんなに大きくない(最大のSTBeeでも64kBしか、ない)し、RAMにコードを置くとワークが無くなる。


  • そんなことよりDFUのHEXファイルがでかすぎ
    8000000 00 50 00 20 6d 01 00 08 ad 01 00 08 ad 01 00 08
    8000010 ad 01 00 08 ad 01 00 08 ad 01 00 08 00 00 00 00
    8000020 00 00 00 00 00 00 00 00 00 00 00 00 ad 01 00 08
    8000030 ad 01 00 08 00 00 00 00 ad 01 00 08 ad 01 00 08
    ・・・
    8003cec 38 00 30 00 30 00 35 00 30 00 30 00 30 00 00 00
    8003cfc f0 00 00 20 04 00 00 00 f4 00 00 20 12 00 00 00
    8003d0c 08 01 00 20 20 00 00 00 1c 01 00 20 10 00 00 00
    8003d1c 2c 01 00 20 36 00 00 00 64 01 00 20 3a 00 00 00
    8003d2c 00 0c 00 20
  • STM8SはFlashが64k,RAM20kしかないので、DFUが16Kも食うのはいかがなものか?






leaflabs: maple IDEの改造

  • -*-勝手に改蔵 -*-勝手に改蔵 -*-勝手に改蔵


read more: mapleIDE


CQ-STARMでdfu-util.exeを使いたい?

  • maple IDEのdfu-util.exeを使うためには、面倒だが
    • STMicroのDFuSeをインストールしたときのドライバーをアンインストールしたのち、
    • maple IDE側のドライバー(実はlibusb-win32に過ぎない)を入れなおさなければならない。

D:\INSTALL\maple-ide-0.0.9\drivers\mapleDrv\dfu>dir

2011/02/18  21:39    <DIR>          .
2011/02/18  21:39    <DIR>          ..
2010/12/15  20:41            41,984 libusb0.dll
2010/12/15  20:41            28,160 libusb0.sys
2010/12/15  20:41            54,272 libusb0_x64.dll
2010/12/15  20:41            32,256 libusb0_x64.sys
2010/12/15  20:41               168 maple.cat
2010/12/15  20:41             3,382 maple.inf
2010/12/15  20:41               168 maple_x64.cat
  • さらに、maple.infに書かれている、VID,PIDを書き換える
  • maple.inf
    ;--------------------------------------------------------------------------
    ; Devices
    ;-------------------------------------------------------------------------- 
    
    [Devices]
    ;;"Maple 003"=LIBUSB_DEV, USB\VID_1EAF&PID_0003
    "STM32 DFU"=LIBUSB_DEV, USB\VID_0483&PID_DF11
    
    [Devices.NT]
    ;;"Maple 003"=LIBUSB_DEV, USB\VID_1EAF&PID_0003
    "STM32 DFU"=LIBUSB_DEV, USB\VID_0483&PID_DF11
    以下略
  • USBを挿しなおして、(あるいはデバイスマネージャーのUSBの一覧からSTM32 DFUを選んでドライバー更新で)
    D:\INSTALL\maple-ide-0.0.9\drivers\mapleDrv\dfu
    を新しいドライバーファイルとして指定する。
  • こうすると、maple IDEから使えるようになるかわりに、dfuw.exeやDFuSeなどから cq-starmにアクセス することが出来なくなる。
  • 元に戻すには、同じように、デバイスマネージャーから、LibUSB-win32デバイスのリストを開いて、 STM32 DFUのデバイスドライバーを削除もしくは更新して、更新先ディレクトリに、元のSTMicro配布の DFuSeのデバイスドライバーを指定する。
    • どうしても戻せない場合は、C:\Windows\inf\oem*.inf の中から、該当のVID,PIDを持つinfファイルを探し出して削除することで、LibUSB-win32デバイスとして認識させないようにすれば、回避できる。とても面倒だ


  • dfu-utilでアップロードしたい場合は、boards.txtのcqstarm項目を書き換える

hardware/leaflabs/boards.txt

cqstarm.upload.usbID=0483:DF11
cqstarm.upload.uploader=dfu-util




  • しかし、動作しない謎・・・
Binary sketch size is reported above. Check it against a 108000 byte maximum.
Loading via dfu-util
Resetting to bootloader via DTR pulse
Searching for DFU device [0483:DF11]...
dfu-util - (C) 2007-2008 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY  

Found Runtime: [0x0483:0xdf11] devnum=1, cfg=0, intf=0, alt=0, name="@Internal   Flash  /0x08000000/12*001Ka,116*001Kg"


Couldn't find the DFU device: [0483:DF11]
  • 上記はmaple IDEからの試行


  • コマンドライン上からもやってみた。
D:\INSTALL\maple-ide-0.0.9>dfu-util.exe -a 0 -D Blink.cpp.bin
dfu-util - (C) 2007-2008 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Opening USB Device 0x0000:0x0000...
Setting Configuration 1...
Claiming USB DFU Runtime Interface...
Determining device status: state = dfuERROR, status = 10
dfuERROR, clearing status
not at least 2 device changes found ?!?
Opening USB Device...
Found Runtime: [0x0483:0xdf11] devnum=1, cfg=0, intf=0, alt=0, name="@Internal Flash  /0x08000000/12*00
16*001Kg"
Setting Configuration 1...
Claiming USB DFU Interface...
Cannot claim interface: usb_claim_interface: could not claim interface 0, win error: 要求されたリソース
用中です。
  • 1回目は失敗、二回目も・・・
D:\INSTALL\maple-ide-0.0.9>dfu-util.exe -a 0 -D Blink.cpp.bin
dfu-util - (C) 2007-2008 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Opening USB Device 0x0000:0x0000...
Setting Configuration 1...
Claiming USB DFU Runtime Interface...
Determining device status: state = dfuIDLE, status = 0
WARNING: Runtime device already in DFU state ?!?
Found Runtime: [0x0483:0xdf11] devnum=1, cfg=0, intf=0, alt=0, name="@Internal Flash  /0x08000000/12*00
16*001Kg"
Setting Configuration 1...
Claiming USB DFU Interface...
Setting Alternate Setting ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
Error obtaining DFU functional descriptor: usb_control_msg: sending control message failed, win error:
テムに接続されたデバイスが機能していません。

Transfer Size = 0x1000
bytes_per_hash=254
Starting download: [dfu_download error -116
Error during download



  • 何故動作しないのか分からない。
  • DFUを使いたい場合、Windowsでは2種類のドライバーが存在する(DFuSeのものと、libusb-win32)
  • どちらを組み込んでいるかによって、片方のユーティリティしか動作しなくなる。
  • で、dfu-util.exeがCQ-STARMに適合しないのは何故だろう。

続く・・・




続くけれど、たぶん、DFUやdfu-utilは切り捨てる方向でいくと思う。何もメリットない。








つれづれ:世界線

  • 3/10以前と3/11以降では、まるで世界の様相が違っている。
  • 別の世界線にいるようだ。
  • 日本人はボコられている。地球によって?宇宙によって?
  • たぶん、これは序章だ。

とうとう第9サイクルに突入してしまったようだ。引き返せない。


本日の標語

9 名無しさん@涙目です。(不明なsoftbank) :2011/03/13(日)

もうやめて!日本のライフはゼロよ!





東北地方太平洋地震と福島原発メルトダウン

七里ケ浜




福島原発の放射能を理解する:カリフォルニア大学のモンリオール(B. Monreal)氏による講演のスライド


「圧力容器を加熱した実験」の結果

  • http://wiredvision.jp/news/201103/2011032423.html
    米国ニューメキシコ州の砂漠にある、隔離された原子力研究所で2000年10月23日(米国時間)、
    科学者たちが原子炉の炉心溶融(メルトダウン)のシミュレーション実験を行なった。
    原子炉の心臓である圧力容器にガスで圧力をかけ、風船のように破裂するまで炉に熱を加えたのだ。
  • 核を扱うことに関しては日本は米露の足元にも及ばない。
  • 実際にこんなことやるか?やってるもんね。かなうわけない。
  • 結局のところ福島は1年以上だらだら流し続けるか、ある意味破局を迎えるかのどちらかしかないだろう。
    • 4基(あるいは6基)のうちどれかが破局を迎えれば、6基とも放棄せざるをえない。
    • 破局というのは水蒸気爆発のことではなく、もはや人や機械が近づけなくなることを指す。
    • それでも50km圏外の地域はかろうじて生き残れるだろう。
  • 日本はいろいろな意味での、核の実験場となってしまった。現在進行形。