HB-1000調査編

NTT西日本が販売していた光LINK HB-1000がHardOffで110円だったので、買ってきてばらしてみました。サービスが終了していてネットで調べると11円で買った人もいました。

Telechipsという韓国の会社のTCC8930というARM SOCが使われていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/3aa64c10-d3f6-4b0a-b4aa-46a854a74aa4.png)

Telechipsは

TCC898x (Alligator) (ARM Cortex-A53 Quad)
TCC897x (ARM Cortex-A7 Quad)
TCC893x (ARM Cortex-A9 Dual Core)
TCC892x (ARM Cortex-A5)
TCC8900 (ARM11)
TCC8800 (?)
TCC7901 (ARM9)

を作っていたようです。HDMI出力を持ちビデオ系の処理に力をいれたSOCのようです。

TCC893XはTCC8930, TCC8933, TCC8935, TCC8937があったようです。

いろいろ調べてUARTはDBG_CNに出てる事がわかりました、

TX -> 4
RX -> 7

ボーレートは115200です。3,5,7,9,11,12はJTAGと思われます。

コネクタのホールにヒートシンクがかぶっているので、ヒートシンクを金鋸で切り取りピンヘッダーを立てました。

```
welcome to lk (0.5.0008)

MEM FREQ : 600MHz
hdmi_phy_reset Phy status = 0, Phy stats CMU = 1, Phy status PLL = 0
tcc_extract_chip_revision : Reg_HDMIV:0x10 Reg_HDCPV:0x0 BackupDDICFG:0xfff BackupHDMICTRL:0x100000f loop:1 phy:225 
Chipset revision = 0xb
fb_cfg base:0x820705cc xres:480 yres:272 bpp:32 
tcclcd_image_ch_set lcdc:0 lcdc_ch:0 pRDMA:0x72000400  
platform_init()
target_init()
flash_boot_main:init start from NAND
[NAND           ] V8.94.157
[NAND           ] Use NDMA Mode 
[NAND           ] H27UBG8T2C
[TNFTL          ]  Die_0:.
[NAND           ] Die=1, B/D=2092, P/B=256, Pg=8192 CW=1024 Pln/D=2
[NAND           ] [RO] sectors
[PARTITION :       boot] [START :         32] [SIZE :      30720] [TYPE :  0]
[PARTITION :     system] [START :      30752] [SIZE :    1331200] [TYPE : 83]
[PARTITION :   userdata] [START :    1361952] [SIZE :    6289184] [TYPE : 83]
[PARTITION :           ] [START :    7651136] [SIZE :     360640] [TYPE :  f]
[PARTITION :      cache] [START :    7651168] [SIZE :     307200] [TYPE : 83]
[PARTITION :   recovery] [START :    7958400] [SIZE :      30720] [TYPE :  0]
[PARTITION :     kpanic] [START :    7989152] [SIZE :      10240] [TYPE :  0]
[PARTITION :     splash] [START :    7999424] [SIZE :       8192] [TYPE :  0]
[PARTITION :       misc] [START :    8007648] [SIZE :       2048] [TYPE :  0]
[PARTITION :        tcc] [START :    8009728] [SIZE :       2048] [TYPE :  0]
[tcc_param] page=0, output=255, resolution=0, hdmi_resolution=0
[tcc_param] composite_resolution=0, component_resolution=0, hdmi_mode=0
lcdc_init, CFG_MISC1: 0x21800100
lcdc_io_init_component, lcdc_num=0, type=2
LCDC0 clk:742500, LCDC1 clk:960000, PLL:8500000, divide:1
fb_cfg base:0x820705cc xres:480 yres:272 bpp:32 
tcclcd_image_ch_set lcdc:0 lcdc_ch:0 pRDMA:0x72000400  
ths8200_enable : mode=15
ths8200_set_mode : mode=15
ths8200_soft_reset
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
i2c-tcc: time out!
Set mode i2c write error
Set standard failed
lcdc_io_init_composite, lcdc_num=1, type=0
lcdc_num = 1, LCDC0 clk:742500, LCDC1 clk:270000, divide:1
fb_cfg base:0x820705cc xres:480 yres:272 bpp:32 
tcclcd_image_ch_set lcdc:1 lcdc_ch:0 pRDMA:0x72000800  
Diplay initialized

kernel  @ 80008000 (9428492 bytes)
ramdisk @ 81000000 (1783902 bytes)
hwnaisei[0]=0  hwnaisei[1]=0

Booting Linux
booting linux @ 0x80008000, ramdisk @ 0x81000000 (1783902)
cmdline: console=null ...
```

ブートローダーは[Little Kernel](https://github.com/littlekernel/lk)(lk)で、アプリケーションでLinuxを起動しているようです。Androidの標準のようです。lkはMITライセンスなので製品で利用してもソースを公開する必要はありません。

ネットを検索したら、ここまで調べた人がいました。

SDKはここにありました。

https://github.com/cvetaevvitaliy/tcc893x

おそらく実機で使われているSDKより新しいものと思われます。

RESETボタンは直につながっているようです。

キーボードに反応しないか起動中にかちゃがちゃやったら、getcというメッセージが出てきました。これをlkのソースで検索したところ、about.cでいくつかのキーを受け付けるようになっていました。fキーを入力するとfastbootになり、USB1_CNがOTGでデバイスになります。

```
Diplay initialized
==========================================
getc: f
Diplay initialized
fastboot_init()
USB Reset
Connect Done: High Speed
USB Reset
Connect Done: High Speed
Stall EP0
```

USB2のOTGが直出しでUSB1_CNで、EHCIがHUB(CY7C65632 USB2)につながってそこからUSB2_CNでした。CSRの8510や蟹さんのWiFiチップもおそらくこれにぶら下がっているものと思われます。OTGはDWCのようです。パワーコントロールはON SemiのNCP382を使っています。

いろいろ考えて試して2日かかりました。

# gmac

TCC8930のGMACはSynopsysのIPを使っているようです。またLinuxのPTP（Precision Time Protocol：IEEE 1588）にも対応できるようになっているようです。だたPTPはUSB20のクロックを使っているのでUSB20との共存はできないようです。PTP使う時はUSB3かOTG使えって事なのかもしれません。AmlogincのOdroid-C1と同じバージョンのIPのようです。RTL8211Eの48PinのパッケージなのでMACとの接続はRGMIIと思われます。

# USB

CY7C65632のパワーコントロールは使わずSOCのGPIOで制御していました。OHCIは定義はありますが、ひょっとすると入ってないのかもしれません。

![TCC-USB(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/488a54c1-e6e7-4228-80de-f6af9bb86c7a.png)

OTGはDWC 2.0ではなく3.0で、このポートがUSB 3のXHCIになるのかもしれません。