読者です 読者をやめる 読者になる 読者になる

How to enable NESC's microUSB connector as Host

First, I have already explain why NESC don't work as USB host below.

honeylab.hatenablog.jp

 

So,I must use tweak to usb controller work only host mode.

I have test change linux kernel config as 'host only' , but it cause link error in modules.
Some driver file must need otg support configuration.

f:id:honeylab:20170218012644p:plain

So I had left this configuration "otg support".

 

While searching same hack,I found this contents.

USB OTG as an Extra USB Host in Allwinner A10, A20 etc | dmsherazi

so,I have edit script.fex (it has dumped from NESC boot image script.bin decompiled).
as USB controller work as only HOST.
And re-compile Linux kernel with some drivers.

It was succeeded,but currentry , It need some soldering for power line .
In near future , it will no need , I hope.

 

 The working bootlog and console is below.

https://bitbucket.org/!api/2.0/snippets/hiromitu/Ge8eB/700c9641d13bfa0e0548f170b83dd582323d36a1/files/nesc_usb%20boot%20log

 

There are some devices message recognized on my custom kernel.

  • a USB-PS Gamepad converter  will use with /dev/input/js0
  • USB-Serial Converter FT232R will make /dev/ttyUSB0
  • IO DATA USB Flash Driver 32GB has uses with fdisk
  • PCI GU-1000Air USB-Ethernet Converter will make eth0 and ping packet to 8.8.8.8 !!

 

And, more devices will work on NESC as a usual Linux.

 

My NESC development envrionment is boot from SD Card.
Linux kernel has re-compiled from Nintendo OSS resource with some re-configure.

This project goal is what new Linux kernel and some drivers will  written to flash area.
I will adjust and learn hard.

 

To write flash :

  • remake boot.img with linux kernel reconfigured and drivers.
  • overwrite script.bin on boot area

I think I will use hakchi custom for update kernel.

.. or Someone who not me , will make it soon.

first step to NESC into USB Host-mode

First success.
NESC recognize USB Flash drive(but custom compiled kernel)
Many kernel compile option are imcompatible with original NES Kernel.
But this is a first step to use USB Device.

 

f:id:honeylab:20170217152152p:plain

 

Why Nintendo Classic Mini does not recognize Flash Drive or USB GamePad ?

f:id:honeylab:20170216170501p:plain

↑これがUSB周りの拡大写真です。

VCC INはL?を通って供給され、D+/D- は並行してR16に渡されています。
しかし、USB OTG ID ピンはR16につながっていません。
よって、USB HOSTとして自動的に認識されることはなく、
少なくとも、上記の部分に部品を追加するか、
Linux側を工夫して、強制的にHOSTモードに入るようにするしかないと考えています。
以下は、olimexのA33ボードの回路図ですが、

f:id:honeylab:20170216170910p:plain

 

f:id:honeylab:20170216171028p:plain

3.0Vにプルアップしておくことと、
USB-DETをR16に接続すること(A33では243Ω経由、しかも1%精度指定)が鍵なのではないかと思います。



尚、このIDがNESCでどこにつながっているかというのは

f:id:honeylab:20170216170713p:plain

内層に接続されてしまっていて、見た目からは判断できませんでした。
もしかすると、olimexのA33と同じようにPB3に接続されているかもしれません。
ちょっとfexでどうなってるか見てくるか。

解析メモ

newroot内のlibEGL.soのコンパイルオプション?

BUILD=RELEASE ARCH=arch_011_udd PLATFORM=default_7a TRACE=0 THREAD= GEOM=mali_gp_geometry_common CORES=MALI400 USING_MALI400=1 TARGET_CORE_REVISION=0x0101 TOPLEVEL_REPO_URL=1c2c9ed REVISION=1c2c9ed CHANGED_REVISION=1c2c9ed REPO_URL=heads/master BUILD_DATE=2016蟷エ 06譛・28譌・ 譏滓悄莠・10:25:01 CST CHANGE_DATE=2016-03-02 10:43:05 +0800 TARGET_TOOLCHAIN=arm-linux-gcc HOST_TOOLCHAIN=gcc TARGET_TOOLCHAIN_VERSION= HOST_TOOLCHAIN_VERSION=gcc version 4.4.7 (Ubuntu/Linaro 4.4.7-1ubuntu2)  TARGET_SYSTEM=gcc-arm-linux HOST_SYSTEM=gcc-x86_64-linux CPPFLAGS= CUSTOMER=internal VARIANT=mali400-gles11-gles20-linux-dma_buf-rgb_is_xrgb-no_Werror HOSTLIB=direct INSTRUMENTED=FALSE USING_MRI=FALSE MALI_TEST_API= UDD_OS=linux

 

busyboxのバージョン

(busybox 1.24.1, 2016-08-30 12:01:55 CEST)

 

部品の型番

USBのそば「7C」 6pin

MN1D6

RS H

D3=P27

ファミコンミニでSDカードからLinuxが完全に起動した

honeylab.hatenablog.jp

上の方法で接続したSDカードから、u-bootとLinuxカーネルを読み込んで、
mmcblk0p1として作ったext2のrootfsをマウントして、
mmcblk0p2に作ったlinux-swapを認識して、仮想メモリ4Gの普通のLinuxが起動しました。
結局のことろ、適当に配線してたのが悪かったっぽいんですよねぇ…
このフレキにしたら、今まで起動していなかった手持ちのSD,マイクロSDカード
すべてからu-boot経由でlinuxが起動しました。

f:id:honeylab:20170213202251p:plain

free -m の結果、Swap: で3282 (MB) が出てますね。

 

で、これ、だれが必要なの…?

 

まぁ、とりあえず単体でいろいろ差し替えて遊べる、というところには来たので、
これからちょいちょい周辺機器をつないで遊んでみようかなと。
i2cってmonoから簡単に触れると便利だなぁとか、
FlashAirのスクリプトを使ってどうにかオンラインのデータをやり取りできないかな、とか
SDIOってうまく触れるのかな?とかいろいろある。

Xがなんか動かないな(フリーズする)
とりあえずstraceして調べてみよう、とか。

 

次の課題としては、せっかくLinux動くようにしたので、コンパイル環境(config)をちゃんと公開しようとか、
なぜかmali.koがうまく読み込めないので、
SDカードからカスタムカーネルを起動しつつ、もともとのfs(newroot)をちゃんとマウントして、swapが有効の状態でkachikachiが動くようにできるかな?ってとこかな。
最新のhakchiからinit周りを持ってきて、このカスタムカーネルと一緒にSDカードに書くだけで動くんじゃないかなって気もするんだけど。

SDカードフレキケーブル試作

試作品一号が動作しました。
取り回しやはんだ付けのしやすさなどをもう一度考えて、
フレキをもう少し短く、その先にプルアップ抵抗等の普通の基板をつける、ってしようかな。

 

とりあえず、今回の試作工程

f:id:honeylab:20170213133128p:plain

 

パターンを作ってみる

f:id:honeylab:20170213133206p:plain

 

試しに当てて試行錯誤する

 

f:id:honeylab:20170213133150p:plain

 

感光用フィルムに印刷

 

フレキ用生基板を使います

 

感光させます

 スプレー式現像液で現像。これすこぶる便利よ。

https://www.amazon.co.jp/dp/B00CBNZJRI

 

現像後、エッチング

f:id:honeylab:20170213133415p:plain

 

 

ドリルで穴をあける

f:id:honeylab:20170213133432p:plain

f:id:honeylab:20170213133440p:plain

きれいに磨いてはんだ付け

f:id:honeylab:20170213133502p:plain

 

つなぐ

f:id:honeylab:20170213133542p:plain

 

Linux起動した!

 

 

 

FlashAir(Wifi-SD Card) on NES Classic Mini

for comming users.

I have already succeeded to boot linux from SD Card on NES Classic Mini.

 Sometimes fail boot and cause error in Linux,I am adjusting now.
I wanto to make connection kit for SDCard on NESC.
More infomation are below.

 

honeylab.hatenablog.jp

 

honeylab.hatenablog.jp

honeylab.hatenablog.jp