honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

ATOMCam2の無線LANチップが変わっていた件

ATOMCam2、初回ロット、そのあとに届いた回収版、そして10月頃に買いなおした3台、どれもすでにバラバラになっているのですが、これらの基板についていた無線LANチップは、間違いなくRTL8189というものでした。

このチップは、普通に使えば子機にもなるし、hostapdを立てれば親機になり、
やろうと思えばad-hocモードという、いわゆる子機同士、ルーターなしでネットワークを構築することができるものでした。
なので、ちょっとこいつをいじって、ルータからの電波の届かないところでも、子機同士でルーティングしてデータを飛ばしたりしたい、ということを思いついていたので、追加でもう一台買ってみました。

すると…あれ??無線LAN基板の色が違うぞ…

f:id:honeylab:20211117153120p:plain

ATBM6031 … えっ、何それ、知らない

 

無線LANチップが変わってる…

 

嫌な予感…

Image

ああぁぁぁぁぁぁあ!!! ad-hoc(IBSS)が設定できないぃぃぃぃぃぃぃ!!!!

f:id:honeylab:20211117152125p:plain

ええええー。なんででしょうかね。RTLが入手不能っていうよりは、たぶん格安の無線LANチップが出たからっていうことで乗り換えたんだと思うんですけど…

ファームウェアを見ると7月ぐらいのにはすでに対応されていて、その後新しい無線LANチップでの技適申請の追加が行われており、適法に更新されています。

が、えーーー。

https://www.altobeam.com/api/sys/stl/actions/download?siteId=1&channelId=28&contentId=139&fileUrl=JDpii4VLW8obArXHgMAKFrRIZZN4Pxu7fawSYRX0slash0sT6V4Q0add0R8DhN0vPCBQMJ7Lbx1kVDP00MpQ2x7G4hmKZ30A0equals00equals00secret0


データシート的に対応しないってことはないような気がするので、あれやこれやといじってみてもダメ。

あちこち漁って出てきた、ATBM603xのドライバのソースとにらめっこしてみると、
デフォルトのソースではデバイス登録の時にフルスペックにしているのに、
ATOMCam2のドライバとして入れてるときにはなぜかAPとCLIENTにしか使えないようにプロファイルを設定しているようです。

f:id:honeylab:20211117152405p:plain

…えーと、運が良ければアドホックの部分のコードは入ってるはず。
ならば、登録のとこにパッチ当てたるわ!!!!と思ってやってみましたが(力技すぎる)
iw wlan0 info のところにはスペックが表示され、ad-hocモードになっているとは表示されますが、BSSIDの設定や周波数設定が動かず…ダメか…

リファレンスのソースコードはビルドはできるのですが、この無線LANチップはSDIOのため、ハード依存のmmcの初期化などのコードが含まれていません。
そこを自前で実装するのは大変です。


でもね。

f:id:honeylab:20211117152716p:plain

GPL!!!GPL!!!このドライバはGPL!!!
カスタムコード入れたとこ、まとめて頂戴!!!!

f:id:honeylab:20211117153018p:plain

待ってるにょ!!!!

 



 

ATOMCam2にDeibanを入れる

honeylab.hatenablog.jp

 

こちらの記事に引き続き。

せっかくオリジナルカーネルが動くことが確認できたので、ユーザーランドも入れてみることにします。
こういう組み込み機器で何かしたいとき、結局クロスコンパイルや何やらが必要になったりして、自分の好きなアプリを入れるのが難しい場合が多いです。
openmikoでも使われているbuildrootにはそこそこパッケージが準備されていますが、
それだけでは物足りなかったり、どうせだからセルフコンパイルしてしまえ、といった場合にapt-getが使えるdebianを入れてしまうとらくちんになります。

ちなみにこういうことができるのはArmadillo-440をいじっていた時に覚えました。

armadillo.atmark-techno.com

例えば、プレイステーションクラシックにdebianを入れる、なんてこともできます。

 

 

さて、しかしながらATOMCam2で使われいるCPUはMIPSとやや特殊な環境。
CPUIDを見るとMIPS R3000と出ていますので、対応しているディストリビューションは結構古く、どうやらDebian8(jessie)まで、の気がしました。

また、対応カーネルが3系、であり、これ以上の上位カーネルを作るのはおそらく無理だと思います。

というわけで、まずはbuildrootで簡易ユーザーランドを作り、debootstrapを使ってjessieを入れてみました。

 

…普通ならここで手順を書くべきですが、基本的にものぐさなのでそういう記録を全くとっていません(ポンコツ

microSDカードの第一パーティションに、カーネルのuImageであるfactory_t31_ZMC6tiIDQNを置いておくのはraspberry-piとかと同じですが、

ATOMCamを使うにあたって、複数のパーティションを作ったり、extパーティションを作るのはちょっと面倒です。そのため、ちょっと複雑ですが(atomcam_toolsも同じ方法ですが)、ext2ファイルシステムイメージをfatパーティションに置き、initramfsでマウント、switch_rootすることでdebianを起動させます。

 

というわけで、まずは結果のみ。

f:id:honeylab:20211018110536p:plain

ATOMCam2のMIPS上で動作するdebianです。

f:id:honeylab:20211018111009p:plain

Flash上のパーティションもマウントできますので、既存のシステムのファイルが読めます。
atomcam_toolsに、なんだかどんどん拡張用の修正を加えてくれる方がいるので、
これと結合すると、このdebian上でATOMのアプリを動かすこともおそらく可能になると思います。

いやまあ、わざわざdebian使うか?っていう話もあるんだけど、まずは動かしてみる、という環境を作る、っていうのはそれなりに大事なのよね。apt便利。

apt-getでセルフコンパイルgccを入れれば、なんとそこでhello,worldがかけるんですよ。

 

ATOM Cam2でSDカード上から自前Linux Kernelを動かす

honeylab.hatenablog.jp

 

↑のようなものを作るにあたって、今まではなぜか存在しているいわゆる「Test.tar」機能を利用し、起動中のスクリプトに割り込む形で各種機能を実現していました。

しかし、このままでは

・Test.tar昨日はrootfs内のスクリプトで実行されているため、メーカーがこの機能を外すと起動できなくなる

・iCamera_appなどを使わず、自前の録画アプリなどを動かそうとすると、その前にウォッチドッグが有効化されてしまい、定期的に犬に餌を与えなければならない。それは結構めんどくさい

など、若干の問題があります。

また、ハードウェアや周辺機器を最大に生かすためにはカーネルの再構築がどうしても最終目標として挙がってきます。

かろうじて今まではinsmod可能なkoモジュールの導入に成功していましたが、カーネルを実際にコンパイルし、flashに書き込んでみると途中で止まってしまったりしてうまくいきませんでしたが、あれこれオプションをいじっていることで、どうにか単体起動な独自カーネルuImageが完成しました。

しかし、これを実際に動かすためにユーザーがFlashに書き込むというのは若干のリスクがあり、また、それを動かすためのdemo.binを生成するというのも少々めんどくさいという問題がありました。

で、今までu-bootのメッセージに出ていたこのfactory_t31_ZMC6tiIDQNという謎ファイルを探している表示について改めて調べてみることにしました。

f:id:honeylab:20211008132622p:plain

すると、発売直後にアトムテックにオネダリしてもらったu-bootのソースコードの中に見つけました(まぁ前から見つけてはいたんだけど)

github.com

動作をよく見てみると、どうやらSDカード上にこのファイルがあると、メモリ上に全部ロードして、ヘッダチェック後、bootmコマンドで起動してくれそうな感じでした。

キタコレ!

f:id:honeylab:20211008133036p:plain

しかし、これではコマンドラインが固定されてしまっています。
おそらくrescure mode的な使用が想定されているのでしょう。

また、出荷時にu-bootのdelayが0に指定されているため、手動でu-bootの環境を変えるのもめんどくさいです。

そこで、カーネルコンパイルオプションとして、本来普通に起動するときに使われているパラメーターを埋め込み、さらに、起動時にu-bootから渡されるこのcmdlineを無視するように設定します(ふつうはつかわないきのうです)

f:id:honeylab:20211008133258p:plain

こうすると、内蔵Flashのルートシステムを使い、自前のカーネルで起動させられそうです。

出来上がったuImageを「factory_t31_ZMC6tiIDQN」の名前でSDカードに配置してATOMCamに挿入して電源を入れると…

 

見事にSDカードからカーネルを読み込んで起動してくれました!

Flashの書き換えも何も必要ではありません。ファイルを置くだけ。

Test.tarと違ってスクリプトへの割り込みやファイルシステムの縛りもない

自由なLinux環境が手に入りました。

また、これはuboot環境での仕様なので、rootfsやkernelのOTA更新によって改変される可能性がかなり低いです。素晴らしい。

 

とりあえずusb-hdmiを使ってHDMIディスプレイをつないで遊んでみる

ローカルの画像や動画が表示できるので、もしかしたらカメラの設置とかそういうのにも使えるんじゃね??とか思ってますが、もしかするとパフォーマンスが足りないかもね。

 

まぁ、こんな感じで割と簡単にLinuxを起動できることが確認できました。

いまはbuildrootでrootfsを作っていますが、普通にdebianとかも入れられる気がします。
ATOMCam2の暗視性性能はかなりお墨付きで、天文観察愛好家の方々がいろいろ試行錯誤して使っているのが観察されています。
このようなガチ工夫によって、何らかの新しい使い方が発見できないか、今後もいろいろ試していきますので、何かそういったことがありましたら是非教えてください。

 

 

atomcam_tools v1.0 rc2を公開しました。

このアプリの使用条件は特にありませんが、こういったものを作るにあたっては突発的にアマゾンで何かを買うことができる資金があることは大変助けになります。

もしアマゾンで何か買うことが多い利用者の方は、是非上記のリンクから入って買い物をしていただくと、売り上げの一部が私に還元されますので是非。

github.com

 

ダウンロードは↑から。

FTPアップロードフォルダにスラッシュを入れるとうまく動作しなかった問題に対処しました(thanks to mnakada!)

 

そして、今までPCなどから画像を撮るためにはRTSPストリーミングが必要でしたが、待望のjpeg直接取得機能が実装されました。

 

これにより、ブラウザなどから表示することはもちろん、wgetなどで静止画を撮ることが可能になりました。

 

あ!!!今気づいたけど、この機能RTSPストリーミングを有効にしてないと動かないぞ…

あーー、まぁ公開しちゃったから次のリリースで治すね。

この機能が気になる方は、RTSPストリーミングをONにしたうえで /cgi-bin/get_jpeg.cgi を呼んでみてください! 

パラパラ連番サンプルとして /still_image.html も準備してあります。

ただし、このjpg取得ルーチンは、あまり多数のクライアントから同時に呼ばれることを想定していません。そうするとたぶん画像が壊れますので、
複数に配信したい場合はいったん何かで受けてからにしてください。

その辺もそのうち。

 

地域限定緊急告知受信ラジオを改造して別の地域で普通のラジオとして使う

たまたま見つけたこの記事が気になりました。

東海地震に備えて、そっちの地方では自動受信機能のあるラジオが行政から準備されているらしい、というのは知っていたが、どうやら最近はそれ以外の自治体でも行政補助などで比較的安価にこのような防災ラジオが聞けるとのことです。

防災ラジオ、でイメージされるのは手回し充電式やソーラー充電式のラジオなどもあるかもしれない。しかし、これは基本的には常時コンセントにつないで、逃げる前にその状態を知らせてくれる機能がメインのようです。

そして、これは各自治体で受信できる放送がプリセットされているため、例えば他県などに引っ越しすると突然役に立たなくなってしまう。これはもったいない。
せめて普通のラジオにとして使えたらいいのではないか、と思う人は結構いるようだが、それを実現までこぎつけてはいないようです。

どれどれ、これはいっちょやってみるか、とメルカリやヤフオクで検索していくつか購入してみました。

まずはこちら。

 

ホーチキ製の緊急ラジオ EMR-01

メルカリで送料込み1,200円。

これは静岡市の緊急情報に対応したラジオとのことです。

早速分解してみましょう。

皆さん、ラジオ分解したことあります?どんな感じだったか覚えてます?

バリコンがあって、IFTや裸コイルがあって、蝋で固めてあったり?

今のラジオこんなんですよ。

 

ででーん。コイル?バリコン?ありません。

メインのマイコンと思われるR5F2134がありますが、一昔前のポータブルラジオなんかに入っていたような受信専用のICは見当たりません。

果たして受信はどうやって???

 

その秘密はこちら。

Image

この超小型、高々5mm角のQFNパッケージのIC、Si4730がその正体です。

(データシート↓)

https://www.skyworksinc.com/-/media/Skyworks/SL/documents/public/data-sheets/Si4730-31-34-35-D60.pdf


これは受信アンプからアナログオーディオ出力、はてはデジタル音声出力まで備えたワンチップデジタルラジオ受信ICなのです。

f:id:honeylab:20210926225626p:plain

 

選局はバリコンやVCOではなく、マイコンからI2Cで制御することで行われます。

このラジオにはフルバンドのIC(Si4730-D60、3060と刻印)とFM専用(Si4704-D60、0460と刻印)のICが二系統載っていて、それぞれ音声受信と緊急信号受信用に割り当てられています。緊急受信信号を受信すると直ちにマイコン制御で緊急放送を受信できるようになっているようです。

基板上にI2C信号のテストパッドがあったので一応信号も見てみます。

確かに、マイコンからラジオ受信チップに信号を送っているようです。

 

この仕組みを理解したうえて、改造可能性を検討しますが…

f:id:honeylab:20210926234033p:plain

この部品構成では、周波数テーブルはメインのマイコン内蔵ROMに制御プログラムと一緒に書き込まれていると考えるしかありません。

書き込まれた制御プログラムは、専用のツールなどで読み込める場合もありますが、そうでない場合も多いです。また、プログラムを一から書けば、もちろん自由に受信周波数を変更することが可能でしょう。しかしながら、それはちょっと手間がかかりすぎます。

 

ちょっとこいつは置いておくことにして、次の機種にかかります。

mediaTRY さくらFM 緊急告知ラジオ

最初に紹介したさくらFMとやらのラジオを入手しました。

ヤフオクで1000円+送料520円

 

media-try.com

 

media-try.com

 

早速これも分解してみます。

 

f:id:honeylab:20210926234139p:plain

基板をよく眺めてみると、メインのマイコンのそばに…24C04と書かれたチップが!

これはI2C EEPROMと呼ばれ、マイコン制御などの機器で小容量のデータ保存などに使われる部品です。この部品が載っているということは、周波数テーブルがここに保存されているという期待が高まってきました。早速中身を覗いてみます。

中身の読み取りには、I2C EEPROM リーダを使います。
アマゾンで2000円程度で買えるものもあります。

 

安価なもの、持っているはずなのですが見つからなかったので、手持ちの中でも一番対応チップの多い大げさなものを使いました。

 

 

ICクリップを使ってリーダと接続します。回路構成によっては、このような接続ではうまくいかない場合がありますが、この機種ではうまくいきました。

Image

24C04の容量は4kbit=512byte。バイナリデータが読み込まれました。

Image

さて、この中におそらく周波数データが含まれていると思われます。

テキストエディタに張り付けて、16進データの区切りを見ながら考えていくと

こんな感じに区切れて…

f:id:honeylab:20210926235010p:plain

この値…確かに周波数だ!

f:id:honeylab:20210926235232p:plain

周波数テーブル以外にもおそらく何らかの初期化データやステータスなどを保存していると思われる不明データもありますが、明確に周波数と思われる部分がありますので、ここを書き換えてしまえば改造できるはず!

 

というわけで早速書き換えていきます。(赤字の部分が書き換えたデータです)

f:id:honeylab:20210926235052p:plain


ここでは、さくらFM 78.7MHz→78.0MHz bayfmなど、関東圏のFM放送の値に変更し、データを書き込みます

はやる気持ちを抑えて電源を入れると…

 

成功しました!!!!

先ほどは当然ノイズしか流れなかった関西の防災ラジオを、関東用のラジオ、しかも放送局プリセットで使いやすいラジオに生まれ変わらせることができました!!!

とりあえず、ぼくのかんがえたさいきょうの関東ラジオプリセットは

f:id:honeylab:20210927005211p:plain

こんな感じになりました!

また、記事にあるように防災無線である60MHz帯の受信もできるようなので、(プリセットされていたのは69.15MHz、受信チップの下限は64MHz)、近々住んでいる市の防災無線が受信可能かどうか調べ、セットしてみたいと思います。

 

ちなみにこのラジオ、公式のYahooストアで「芦屋モデル」として8,800円で売られていますが、回路的に同じ「西宮モデル」は2,200円で売られているようです。

f:id:honeylab:20210927000442p:plain



(おそらく助成金が、とかそういう関係なんだとは思います。)


もしかすると、このラジオは引っ越した際にはその市内のどっかにおいていったほうが公共の助けにはなる気もしますが、自分のものとして持っているのであれば、このように改造し、新しい住まいでの防災に備える、という使い方もできるのかもしれません。

 

今回、偶然にもこのさくらFMモデルが(というより、紹介記事を読んで直感的に行けると思い)改造可能でしたが、そうでないものもあるかもしれません。

もし、手元にこういった防災ラジオをお持ちで、また、引っ越しなどにより当面使用の予定がないとか、単純に気になる、とか言った場合、中の写真を送っていただけるとそのラジオの可能性について検討できるかもしれません。

 

ATOMCam2の機能拡張用ツールを公開しました

過去にtelnetやftpd、rtspの機能を実装したツールを公開しましたが、

honeylab.hatenablog.jp

これらを整理して機能追加し、
また設定が容易になるようにWebUIを付けてリリースしました。

インストールは簡単で、ツールをダウンロードして展開し、普段録画に使用しているmicroSDに保存して電源を入れるだけです。

 

f:id:honeylab:20210924000146p:plain



不要になったら簡単に削除することができ、本体ストレージには一切手を加えることがありません。

 

これにより実現される機能はなんと!

FTPサーバ機能

Telnetコンソール

・RTSPサーバ機能 : VLCで開くためのURL表示機能が付きました!

FTPアップロード機能 ←New!! NAS転送機能の代替になります。
また、通常録画ファイルに加え、↓の検知動画もアップロードできます。
接続情報が正しいかどうかのテストボタンもあります。

・検知動画保存機能←New!! :検知動画、現在はクラウド・アプリ経由でしかダウンロードできませんが、内蔵microSDに保存することができるようになります。

・スケジュール録画機能 ←New!!:指定時間以外の録画は随時削除して容量を開けることができるかもしれません。昼間不要、とか夜だけ録画したい人、いる??

・定期リブート機能 ←New!! :何らかの理由で時々再起動したいことがあるかも…

・SWAPファイル設定機能 ← New!! :RTSPサーバを使用する際など、安定動作に不可欠です。初期状態では0ですので、RTSPサーバを起動する際は必ず設定してください。

・WebUI ←New !!:上記の機能のON/OFFをすべてブラウザから設定できます。

 

Web設定画面はこんな感じ!!

f:id:honeylab:20210923235358p:plain

ダウンロードはこちらから

github.com

 

ファイルの詳細、機能要望などはこちらのリポジトリから行えます。

一通りテストはしてますが、細かい挙動など、いろいろあるのでとりあえずRCです。

github.com

 

READMEをよく読んでくださいね。

こんな感じのカメラとかを使ったことがある人ならなんとなくで使えるかもしれません。

あと、くれぐれも、これは非純正なのでそこんとこよろしく…

RTSPサーバ機能は、純正が走り出したら落としますたぶん。

 

尚、手元のATOMCam2でしか確認していません。
もしかするとATOMCamでも動くかもしれませんが、動かないかもしれません。