PS2251-07(2307)でPsychsonを動かすパッチを公開しましたが、手順が複雑かつ不完全だったため、改めて簡略化したパッチファイルと手順を公開します。
差分ファイル
このファイルには以下の変更が含まれています。
- PS225-07(2307)対応(差分を適用すると逆に2307以外では動きません)
- USB3.0で動作しない既存バグの修正
注意: このファイルはPS2251-07(2307)でPsychsonのカスタムファームウェアを動かす実験を目的とした研究資料です。動作の保証をするものではありません。差分適用後のプログラムを動作させたりカスタムファームウェアを書き込むことでデバイスやPCが使えなくなったり壊れても責任を負えません。自己責任で利用してください。
“Psychson2307_diff” をダウンロード Psychson2307_diff_20170401.zip – 6453 回のダウンロード – 4.85 KB動作確認デバイス
以下のUSBメモリで動作を確認しています。
TOSHIBA TransMemory-MX V3SZK-016G
[code]
Action specified: GetInfo
Gathering information…
Reported chip type: 2307
Reported chip ID: 98-3A-98-A3-76-51
Reported firmware version: 2.15.55
Mode: Firmware
[/code]
TOSHIBA TransMemory-MX TNU-B008GK
[code]
Action specified: GetInfo
Gathering information…
Reported chip type: 2307
Reported chip ID: 98-DE-98-92-72-50
Reported firmware version: 2.03.53
Mode: Firmware
[/code]
その他必要なもの
2307用CFWのビルド手順
- brandonlw/Psychsonからソースコードをダウンロードして展開する
- 「Psychson2307_diff_20170401.zip」の中身を1.で展開したPsychsonのフォルダに上書き・追加する
- patchコマンドで差分を適用する (動画)
- 「firmware_ps225107.rar」の中から「FW07FF01V10153M_20140116.bin」と「BN07V106M.BIN」を取り出して「firmware」フォルダの中に置く
- 「firmware」フォルダの中に置いた「fire2db.pl」を実行する (要Perl 5)
- build.batを実行する
[code]
patch -p0 < firmware-firmware2307.diff
patch -p0 < DriveCom-DriveCom2307.diff
[/code]
ペイロードの埋め込み
上で作成したファームウェアファイル(bin/fw.bin)に必要に応じてペイロードファイルを埋め込みます。
参照: https://github.com/brandonlw/Psychson/wiki/Embed-HID-Payload-into-Custom-Firmware
2307用CFWの書き込み手順
- VS2012で差分適用後のDriveComをビルドする
- 「firmware_ps225107.rar」の中から「BN07V502TAW.BIN」を取り出す
- 「BN07V502TAW.BIN」をバイナリエディタで開きオフセット0x4D85, 0x4D86の値を00に書き換える
- DriveCom.exeでファームウェアを書き込む
[code]
DriveCom.exe /drive=E /action=SendFirmware /burner=BN07V502TAW.BIN /firmware=fw.bin
[/code]
コメント
3.0で動かないバグはどこで修正されているのでしょうか?
またそれは2303のチップでも3.0で動かすことができますか?
>3.0で動かないバグはどこで修正されているのでしょうか?
firmware-firmware2307.diffの以下の部分になります。
- USBCTL = bmAttach | bmSuperSpeed;
+ USBCTL = bmAttach | bmHighSpeed;
>またそれは2303のチップでも3.0で動かすことができますか?
おそらく動くと思いますが、2303のデバイスが手元にないため動作は確認できていません。
教えていただきありがとうございます
試しにusb.cのUSBCTL = bmAttach | bmSuperSpeed;を
USBCTL = bmAttach | bmHighSpeed;に書き換えて試してみましたが
実行されずメモリのプロパティを見ると
デバイス USB\VID_13FE&PID_5201\5&cc190b6&0&2 を移行できませんでした。
最後のデバイス インスタンス ID: USB\VID_0FCE&PID_5198\CB5A1VC2HC
クラス GUID: {36FC9E60-C465-11CF-8056-444553540000}
場所のパス:
移行ランク: 0xF000FFFF0000F130
存在: false
状態: 0xC0000719
となっていました
自分ではどうにかできそうにないので2307のチップを探そうと思っています
いまさら質問に答えていただきありがとうございました
当サイトで使われているTOSHIBA TransMemory-MX TNU-B008GKを使用しているのですが、
ファームウェアの書き込みの際に
FATAL: System.InvalidOperationException: DeviceIoControl failed: 048F
というエラーが吐き出されて、ファームウェアの書き込みを行うことができません。
何か解決法がありましたら、ご教授いただけたら幸いです。
DriveCom.exe /drive=ドライブ /action=GetInfo
で得られる、chip type、chip ID、firmware versionは記事に記載しているものと同じでしょうか?
値が違うか、そもそもGetInfoでデータが取得できない場合はコントローラ、バージョンが変わっていてこのパッチが使えない可能性が高いです。
このページに書かれてある通り
Action specified: GetInfo
Gathering information…
Reported chip type: 2307
Reported chip ID: 98-DE-98-92-72-50
Reported firmware version: 2.03.53
Mode: Firmware
と表示されます
GetInfoの値が同じで中身だけが変わっているという可能性もなくはないですが、
初期状態でファームウェアを書き込もうとすると似たようなエラーが出た記憶があります。
この場合、カバーを外してコントローラのピンをショートさせることで強制的にBootModeで起動させた後、
DriveCom.exe /drive=E /action=SendExecutable /burner=BN07V502TAW.BIN
DriveCom.exe /drive=E /action=SendFirmware /firmware=fw.bin
の順にコマンドを実行することで正常に書き込めたはずです。
ピンショートの方法は以下のページを参考にしてください。
http://kikuzou.hateblo.jp/entry/2014/11/21/143115
この記事のコントローラは2303ですが、2307も同様に「TOSHIBA」のロゴを基準に右から2番目と3番目のピンの間です。
教えていただきありがとうございます!
無事書き込みには成功しましたが、埋め込んだPayloadが実行されませんでした。
デバイスドライバーのインストールが始まって、失敗という状況になるので、何かUSB自体に問題があるのかもしれません。
2, 3番ピンをショートさせて接続後
DriveCom.exe /drive=D /action=GetInfo
Action specified: GetInfo
Gathering information…
Reported chip type: 2307
Reported chip ID: 98-3A-98-A3-76-51
Reported firmware version: 1.02.10
Mode: BootMode
DriveCom.exe /drive=D /action=SendExecutable /burner=BN07V502TAW.BIN
Action specified: SendExecutable
DriveCom.exe /drive=D /action=GetInfo
Action specified: GetInfo
Gathering information…
Reported chip type: 2307
Reported chip ID: 98-3A-98-A3-76-51
Reported firmware version: 5.02.41
Mode: Burner
DriveCom.exe /drive=D /action=SendFirmware /firmware=fw.bin
Action specified: SendFirmware
Gathering information…
Reported chip type: 2307
Reported chip ID: 98-3A-98-A3-76-51
Reported firmware version: 5.02.41
Mode: Burner
Rebooting…
Sending firmware…
FATAL: System.InvalidOperationException: Header not accepted
場所 DriveCom.PhisonDevice.TransferFile(Byte[] data, Byte header, Byte body)
場所 DriveCom.Startup._RunFirmware(String fileName)
場所 DriveCom.Startup._SendFirmware()
場所 DriveCom.Startup.Main(String[] args)
流石に中身が変わってるのか動かないです
もし、Header not acceptedに関する知見がありましたらご教授いただけたら幸いです
Header not acceptedはバーナー(BN07V502TAW.BIN)が対応していない場合などに出るエラーだった記憶があります。
ピンショートさせずに普通のUSBメモリとして接続した状態でGetInfoした際の応答は以下と同じでしょうか?
違う場合はやはりBN07V502TAW.BINと互換性がないデバイスの可能性があります。
Action specified: GetInfo
Gathering information…
Reported chip type: 2307
Reported chip ID: 98-DE-98-92-72-50
Reported firmware version: 2.03.53
Mode: Firmware
返信ありがとうございます!!
>ピンショートさせずに普通のUSBメモリとして接続した状態でGetInfoした際の応答は以下と同じでしょうか?
1度試して失敗してからは、ピンショートさせずに接続するとUSBメモリとして認識されなくなってしまいました。
そうなると元のファームウェアバージョンを知ることはできなさそうですね。
この記事を書いたときwww.usbdev.ruから落とせるPS2251-07のバーナーファイルはBN07V502TAW.BINが最新だったんですが、
今firmware_ps2251-07.rarを確認するとBN07V601TAW.BINなど他の新しいバーナーファイルが含まれていました。
BN07V502TAW.BINがだめでも、これらの新しいバーナーファイルはお持ちのデバイスと互換性があるかもしれません。
BN07V601TAW.BIN等の最新のバーナーでファームウェア書き込みを試してみて、エラーなく書き込みが完了するか、
Header not accepted以外のエラー(おそらくDeviceIoControl failed:~といったエラー)が出れば可能性がありそうです。
BN07V601TAW.BINにて再度試みましたが、同じくHeader not acceptedエラーでした。
色々試してみたので情報共有させていただきます。
firmware_ps2251-07.rar内のBN07V*.BIN系の全ファイルと0x4D85, 0x4D86の書き換え有り無しで全パターン試してみました。
結果は、0x4D85, 0x4D86の書き換え有り且つ、BN07V600T9W.BIN or BN07V600T9.BINにて
Executing…
Mode: Firmware まで表示され書き換えが完了してそうでした。
しかし、書き換え後に再接続してみても何か機能することもなくUSBメモリとして認識されることもありませんでした。やはり、BN07V*TAW.BIN系のファイルとは書き換える内容が異なるのでしょうか?結局上手くは行きませんでしたがバージョンのヒントにはなりそうですね。
情報共有ありがとうございます。
BN07V600T9W.BIN, BN07V600T9.BINの正しい書き換え箇所は0x4D85, 0x4D86ではないのですが、
0x4D85, 0x4D86を書き換えた場合も副作用によってなぜか書き込みがうまくいくようです。
(正しい箇所を書き換えた場合と0x4D85, 0x4D86とで書き込んだファームをダンプして一致を確認)
そして、書き換えが完了してそうなのに再接続で機能しない問題ですが、
そもそもこの2307パッチか元々のPsychsonのコード自体に問題があってWindows 10で正常なHIDデバイスとして認識されないみたいです。
(試してないですがおそらくWindows 11でも同様でしょう)
このパッチを公開した時点ではWindows 7でしか動作確認をしていなかったため問題に気づきませんでした。
また時間があるときにこの問題を修正できるか詳しく調査してみます。