วันจันทร์ที่ 22 กันยายน พ.ศ. 2557

การหาขา GPIO ของ SoC



1. find ground (like that on the USB port)

2. look for traces coming from the SoC via just one resistor (10K?) and linked to ground: these are most likely unused GPIOs

3. put your multimeter between gnd and the resister (try both sides)

4. try this until you get a reading (change):

(this is for GPIO0)

echo 0 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio0/direction

echo 0 > /sys/devices/virtual/gpio/gpio0/value

echo 1 > /sys/devices/virtual/gpio/gpio0/value




ที่มา

วันจันทร์ที่ 15 กันยายน พ.ศ. 2557

WRT54GS v6 Flash Upgrade

WRT54GS มีหน่วยความจำ RAM 16 MB, ROM 2 MB ทำให้ลงรอม dd-wrt รุ่น Standard ไม่ได้เนื่องจากพื้นที่ใน ROM มีไม่พอ แนวทางผมคือเพิ่มขนาดของ ROM โดยเปลี่ยนไอซี Flash Memory จาก 2 MB เป็น 4 MB
ไอซี Flash เดิมคือ Intel JS28F160
Intel JS28F160
เปลี่ยนเป็นไอซี Spansion S29GL032A90
Spansion S29GL032A90
อุปกรณ์ที่ใช้มี
  1. Computer ที่มีพอร์ต Parallel
  2. Wiggler cable ทำเองโดยเอาวงจรจากนี้ครับ http://wiki.openwrt.org/doc/hardware/port.jtag.cable.buffered

ซอฟต์แวร์ที่ใช้คือ 
  1. zjtag เป็นซอฟต์แวร์ฟรีรายละเอียดเพิ่มเติมจากลิงค์นี้ครับ http://zjtag.sourceforge.net/

ขั้นตอนที่ใช้
  1. สำรองไฟล์ cfe และ nvram โดยต่อเราเตอร์เข้ากับคอมพิวเตอร์ผ่านทางพอร์ต JTAG ต่อเข้ากับ Wiggler cable ดังรูป 
    พอร์ต JTAG
  2. เข้าไปยัง directory ของ zjtag และใช้คำสั่ง zjtag -backup:cfe /wiggler เพื่อสำรองไฟล์ cfe จะได้ไฟล์ชื่อ CFE.BIN.SAVED...ตามด้วยวันที่เวลา
  3. ใช้คำสั่ง zjtag -backup:nvram /wiggler เพื่อสำรองไฟล์ nvram จะได้ไฟล์ชื่อ NVRAM.BIN.SAVED...ตามด้วยวันที่เวลา
  4. เปลี่ยนเอาไอซีเดิมออกแล้วใส่ตัวใหมเข้าไป
  5. ถอด RX102, RX103, และ RX101 ออก แล้วใส่ R 0 โอห์ม เข้าไปที่ RY100 ดังรูป 
    เปลี่ยนค่าตัว R ข้าง Flash
  6. ใส่ CFE เข้าไปในไอซีตัวใหม่โดยเปลี่ยนชื่อไฟล์สำรองที่ทำไว้ในข้อ 3 และ 4 เป็น CFE.BIN และ NVRAM.BIN
  7. ใช้คำสั่ง zjtag -flash:cfe /wiggler  เพื่อใส่ CFE เข้าไป
  8. ใช้คำสั่ง zjtag -flash:nvram /wiggler  เพื่อใส่ NVRAM เข้าไป
  9. ใส่เฟิร์มแวร์ DD-WRT รุ่น Standard ของ WRT54GS v4 ไฟล์นี้ครับ
  10. วิธีการใสเฟิร์มแวร์คือ นำสายแลนเสียบเชื่อมคอมกับเราเตอร์
  11. เข้าไปในไดเรคทอรี่ที่โหลด dd-wrt มาไว้
  12. พิมพ์คำสัง tftp -i 192.168.1.1 PUT dd-wrt.v24_std_generic.bin อย่าเพิ่งกด Enter
  13. จ่ายไฟเข้าเราเตอร์ พร้อมทั้งกด Enter รอจนกระทั่งขึ้นข้อความ Transfer successful: 3710976 bytes in 20 second(s), 185548 bytes/s
  14. รอเราเตอร์อัพเดทตัวเอง ประมาณ 5 นาที 
  15. เสร็จสิ้นกระบวนการครับ
มีคำถามอะไรสงสัยสามารถถามได้นะครับ

วันอาทิตย์ที่ 14 กันยายน พ.ศ. 2557

Linksys WRT54GS v6

เราเตอร์ตัวนี้เป็นหนึ่งในรุ่นยอดนิยมในอดีต ในซีรีย์ของ WRT54G
ตัวเครื่องภายนอก
บอร์ดหลักจัดเรียงอุปกรณ์คล้ายๆกับ WRT54G รุ่นอื่น ๆโดยมีไอซีสำคัญๆ คือ
บอร์ดหลัก
BROADCOM BCM5352 -> OPTIMIZED 802.11G ROUTER WITH BROADRANGE™
BROADCOM BCM5352
SAMSUNG K4S1632I -> 128Mb F-die SDRAM
SAMSUNG K4S1632I
Intel JS28F160 -> 2MB Flash
Intel JS28F160
74LVC04A -> Hex inverter
74LVC04A
AP1635 -> PWM/PFM DUAL MODE STEP-DOWN DC/DC CONVERTER
AP1635
AP1513 -> PWM CONTROL 2A STEP-DOWN CONVERTER
AP1513
BROADCOM BCM2050 -> WLAN Chipset for 802.11a/b/g
SiGe SE2528L ->  2.4 GHz Power Amplifier with Power Detector
WLAN
พอร์ต JTAG และ Serial ควมเร็ว 115200
Serial & JTAG

ไฟล์ CFE และ NVRAM โหลดจากลิงค์ด้านล่างครับ

วันศุกร์ที่ 12 กันยายน พ.ศ. 2557

THOMSON ST536 v6

อุปกรณ์ตัวนี้เป็น ADSL Router มี 1 พอร์ต LAN และ 1 พอร์ต USB
ตัวเครื่อง
ไอซีหลักๆ ในเครื่องคือ
บอร์ดหลัก
BROADCOM BCM6338 -> ADSL2+ BRIDGE/ROUTER SOLUTION
BROADCOM BCM6338
Spansion S29GL032N -> 32 Megabit 3.0-Volt only Page Mode Flash Memory Featuring 110 nm MirrorBit Process Technology
Spansion S29GL032N
ELPIDA DS1216AGTA -> 128M bits SDRAM 
ELPIDA DS1216AGTA
ST 613I -> ADSL Driver?
ST 613I
L7812CV -> 12v Positive voltage regulators
L7812CV
 AP34063 -> Universal DC/DC Converter
AP34063
ระบบไฟของบอร์ด
ระบบไฟ

ใต้บอร์ด

Hatari HW-AA101

อุปกรณ์ตัวนี้เป็น ADSL2+ Router
ตัวเครื่องด้านนอก
ด้านในเครื่องมีบอร์ดวงจรหลัก มีไอซีหลักๆ คือ
บอร์ดหลัก
TRENDCHIP TC3162L2 -> ADSL2/2+ Bridge/Router Processor
TRENDCHIP TC3162L2
ESMT M12L64164A -> 1M x 16 Bit x 4 Banks Synchronous DRAM
ESMT M12L64164A
TRENDCHIP TC3084 ->  integrated analog front end and line driver
TRENDCHIP TC3084
IC+ IP101A LF -> Single port 10/100 Fast Ethernet Transceiver
IC+ IP101A LF
MT34063M -> Universal DC to DC Converter
MT34063M
MT1117 -> 1A LDO Linear Voltage Regulator
MT1117
ใต้บอร์ดมีไอซีหน่วยความจำอยู่
ใต้บอร์ด
ไอซี Flash
MXIC 29LV160CBTC -> 16M-BIT [2Mx8/1Mx16] CMOS SINGLE VOLTAGE 3V ONLY FLASH MEMORY
MXIC 29LV160CBTC
ระบบไฟและพอร์ตต่างๆ มีพอร์ต Serial ความเร็ว 115200 และ JTAG
Serial & JTAG และระบบไฟ
Boot Message รหัสผ่านคือ 1234


Bootbase Version: VTC1.13 | 2007/1/22 17:18:52
RAM: Size = 8192 Kbytes
DRAM POST: Testing:  8192K
OK
FLASH: AMD 16M *1

RAS Version: 2.9.8.1(UE0.C19)3.5.18.0
System   ID: 2.9.8.1(UE0.C19)3.5.18.4| 2007/04/13

Press any key to enter debug mode within 3 seconds.
............................................................
Copyright (c) 2001 - 2006 TrendChip Technologies Corp.
initialize ch = 0, ethernet address: 00:13:33:10:b7:20
initialize ch = 1, ethernet address: 00:13:33:10:b7:20
Wan Channel init ........ done
Initializing ADSL F/W ........ done
ANNEXA
Syncookie switch Off!
Press ENTER to continue...






                   Enter Password : XXXX
Copyright (c) 2001 - 2006 TrendChip Technologies Corp.
tc> ?
Valid commands are:
sys             exit            ether           wan
etherdbg        usb             ip              bridge
dot1q           pktqos          show            set
lan
tc>

วันพุธที่ 10 กันยายน พ.ศ. 2557

Buffalo WCR-G300

วันนี้ผมมีเราเตอร์มารีวิวอีกตัวนึงเป็นของ Buffalo รุ่น WCR-G300 มี 1 WAN, 4 LAN, Wireless b/g/n 300 Mbps เสาเป็นแบบถอดเปลี่ยนไม่ได้
ตัวเครื่องภายนอก
ภายในเครื่องใช้ CPU ของ Ralink 
บอร์ดภายในเครื่อง
Ralink RT3352F -> 802.11n Wireless Router-on-a-Chip
Ralink RT3352F
EtronTech EM639165TS -> 8Mega x 16 Synchronous DRAM (SDRAM) 
EtronTech EM639165TS
MXIC MX25L3206E -> 32M-BIT [x 1 / x 2] CMOS SERIAL FLASH
MXIC MX25L3206E
MP1482DS -> 2A, 18V Synchronous Rectified Step-Down Converter เป็นวงจรแปลงไฟ 3.3v
MP1482DS
พอร์ต Serial ความเร็ว 57600 และพอร์ต JTAG
พอร์ต Serial & JTAG
อีกด้านของบอร์ด
หน้า Web สำหรับ Config ใช้ IP 192.168.11.1
Web Config
Boot Message
U-Boot 1.1.3 (Nov 11 2011 - 21:40:07)

Board: Ralink APSoC DRAM:  16 MB
relocate_code Pointer at: 80fb0000
******************************
Software System Reset Occurred
******************************
spi_wait_nsec: 3c
spi device id: c2 20 16 c2 20 (2016c220)
find flash: MX25L3205D
raspi_read: from:30000 len:1000
.raspi_read: from:30000 len:1000
.*** Check if data is correct or not...
*** Data is correct.
============================================
Ralink UBoot Version: 3.5.3.0
Buffalo UBoot Version: 3.00
--------------------------------------------
ASIC 3352_MP (Port5<->None)
DRAM_CONF_FROM: Boot-Strapping
DRAM_TYPE: SDRAM
DRAM_SIZE: 128 Mbits
DRAM_WIDTH: 16 bits
DRAM_TOTAL_WIDTH: 16 bits
TOTAL_MEMORY_SIZE: 16 MBytes
Flash component: SPI Flash
Date:Nov 11 2011  Time:21:40:07
============================================
icache: sets:256, ways:4, linesz:32 ,total:32768
dcache: sets:128, ways:4, linesz:32 ,total:16384

 ##### The CPU freq = 400 MHZ ####
 estimate memory size =16 Mbytes

Please choose the operation:
   1: Load system code to SDRAM via TFTP.
   2: Load system code then write to Flash via TFTP.
   3: Boot system code via Flash (default).
   4: Entr boot command line interface.
   7: Load Boot Loader code then write to Flash via Serial.
   9: Load Boot Loader code then write to Flash via TFTP.                     0

3: System Boot system code via Flash.
## Booting image at bc050000 ...
raspi_read: from:50000 len:40
.   Image Name:   Linux Kernel Image
   Created:      2012-11-27   7:57:49 UTC
   Image Type:   MIPS Linux Kernel Image (lzma compressed)
   Data Size:    3243968 Bytes =  3.1 MB
   Load Address: 80000000
   Entry Point:  80320000
raspi_read: from:50040 len:317fc0
..................................................   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
No initrd
## Transferring control to Linux (at address 80320000) ...
## Giving linux memsize in MB, 16

Starting kernel ...


LINUX started...

 THIS IS ASIC
Linux version 2.6.21 (root@SWD1-CVS3) (gcc version 3.4.2) #3 Thu Nov 22 16:16:16 CST 2012

 The CPU feqenuce set to 400 MHz
CPU revision is: 0001964c
Determined physical RAM map:
 memory: 01000000 @ 00000000 (usable)
Built 1 zonelists.  Total pages: 4064
Kernel command line: console=ttyS1,57600n8 root=/dev/mtdblock4
Primary instruction cache 32kB, physically tagged, 4-way, linesize 32 bytes.
Primary data cache 16kB, 4-way, linesize 32 bytes.
Synthesized TLB refill handler (20 instructions).
Synthesized TLB load handler fastpath (32 instructions).
Synthesized TLB store handler fastpath (32 instructions).
Synthesized TLB modify handler fastpath (31 instructions).
Cache parity protection disabled
cause = 50808000, status = 11000000
PID hash table entries: 64 (order: 6, 256 bytes)
calculating r4koff... 00186a00(1600000)
CPU frequency 400.00 MHz
Using 200.000 MHz high precision timer.
Dentry cache hash table entries: 2048 (order: 1, 8192 bytes)
Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
Memory: 12840k/16384k available (2871k kernel code, 3544k reserved, 325k data, 108k init, 0k highmem)
Mount-cache hash table entries: 512
NET: Registered protocol family 16
NET: Registered protocol family 2
Time: MIPS clocksource has been installed.
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 512 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 512 bind 512)
TCP reno registered
deice id : c2 20 16 c2 20 (2016c220)
MX25L3205D(c2 2016c220) (4096 Kbytes)
mtd .name = raspi, .size = 0x00400000 (4M) .erasesize = 0x00010000 (64K) .numeraseregions = 0
Creating 6 MTD partitions on "raspi":
0x00000000-0x00030000 : "Bootloader"
0x00030000-0x00040000 : "Config"
0x00040000-0x00050000 : "Factory"
0x00050000-0x00180000 : "Kernel"
0x00180000-0x003b0000 : "RootFS"
0x003b0000-0x00400000 : "User_CFG"
squashfs: version 3.2-r2 (2007/01/15) Phillip Lougher
squashfs: LZMA suppport for slax.org by jro
JFFS2 version 2.2. (NAND) (SUMMARY)  (C) 2001-2006 Red Hat, Inc.
io scheduler noop registered (default)
Ralink gpio driver initialized
HDLC line discipline: version $Revision: 1.1.1.1 $, maxframe=4096
N_HDLC line discipline registered.
Ralink APSoC Hardware Watchdog Timer
Serial: 8250/16550 driver $Revision: 1.7 $ 2 ports, IRQ sharing disabled
serial8250: ttyS0 at I/O 0xb0000500 (irq = 37) is a 16550A
serial8250: ttyS1 at I/O 0xb0000c00 (irq = 12) is a 16550A
loop: loaded (max 8 devices)
rdm_major = 254
Ralink APSoC Ethernet Driver Initilization. v2.1  256 rx/tx descriptors allocated, mtu = 1500!
MAC_ADRH -- : 0x0000000c
MAC_ADRL -- : 0x43335277
PROC INIT OK!
PPP generic driver version 2.4.2
PPP BSD Compression module registered
NET: Registered protocol family 24
PPPoL2TP kernel driver, V0.17
PPTP driver version 0.8.1
flash0: started
block2mtd: version $Revision: 1.1.1.1 $
nf_conntrack version 0.5.0 (128 buckets, 1024 max)
ip_tables: (C) 2000-2006 Netfilter Core Team, Type=Restricted Cone
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
VFS: Mounted root (squashfs filesystem) readonly.
Freeing unused kernel memory: 108k freed
init started: BusyBox v1.12.1 (2012-11-22 16:09:35 CST)
starting pid 13, tty '': '/etc_ro/rcS'
Algorithmics/MIPS FPU Emulator v1.5
devpts: called with bogus options
mount: mounting none on /proc/bus/usb failed: No such file or directory
Welcome to
     _______  _______  ___     __  ____   _  _   ___
    |  ___  \|   __  ||   |   |__||    \ | || | /  /
    | |___| ||  |__| ||   |__  __ |     \| || |/  /
    |   _   /|   _   ||      ||  || |\     ||     \
    |__| \__\|__| |__||______||__||_| \____||_|\___\

                     =System Architecture Department=

[check_jffs]80 : JFFS_OK
Set: phy[0].reg[0] = 3100
Set: phy[1].reg[0] = 3100
Set: phy[2].reg[0] = 3100
Set: phy[3].reg[0] = 3100
Set: phy[4].reg[0] = 3100
nvram_init: INFO=>nvram MAC initialized successfully!
==>shm_init()!!
check_shm_hash: Check shm hash value
nvram_init: INFO=>nvram conf initialized successfully!
nvram_init: INFO=> RAM CONF successful created!
nvram_init: INFO=> RC.CONF successful created!
---------------- Get WLAN MAC 10:6f:3f:6d:4d:bc---------------
switch reg write offset=94, value=1000
switch reg write offset=14, value=405555
switch reg write offset=50, value=2001
switch reg write offset=98, value=7f3f
switch reg write offset=e4, value=3f
switch reg write offset=40, value=1001
switch reg write offset=44, value=1001
switch reg write offset=48, value=1002
switch reg write offset=70, value=ffff506f

phy_tx_ring = 0x00ac9000, tx_ring = 0xa0ac9000

phy_rx_ring0 = 0x00aca000, rx_ring0 = 0xa0aca000
MAC_ADRH -- : 0x0000106f
MAC_ADRL -- : 0x3f6d4dbc
RT305x_ESW: Link Status Changed
CDMA_CSG_CFG = 81000007
GDMA1_FWD_CFG = C0710000
vlan0001: Setting MAC address to  10 6f 3f 6d 4d bc.
VLAN (vlan0001):  Underlying device (eth2) has same MAC, not checking promiscious mode.
vlan0002: Setting MAC address to  10 6f 3f 6d 4d bc.
VLAN (vlan0002):  Underlying device (eth2) has same MAC, not checking promiscious mode.
vlan0001: dev_set_promiscuity(master, 1)
device eth2 entered promiscuous mode
device vlan0001 entered promiscuous mode
input_access=[3]
echo 3 > /proc/lan_wlan_access_controller
br0: port 1(vlan0001) entering learning state
Fri Jan  1 00:00:00 GMT 2010
device ra2 is already a member of a bridge; can't enslave it to bridge br0.
[Enter Test] in wlan_led_ctrl.c main()
.brctl setwlanforward br0 15
libupnp: using UDP SSDP_PORT = 1900
rmmod: ipv6passthru: No such file or directory
rmmod: ipv6passthru: No such file or directory
/usr/shell/dnsmasq.sh stop ok
/usr/shell/dnsmasq.sh start ok
dnsmasq: [truncated] m
/usr/shell/udhcpd.sh config ok
/usr/shell/udhcpd.sh start ok

***** g_wl_interface = ra0 ******

MAX_NUM_SESSIONS : 5; NUM_SEES: 64
starting pid 810, tty '/dev/ttyS1': '/bin/sh'


BusyBox v1.12.1 (2012-11-22 16:09:35 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

#

cpuinfo
# cat /proc/cpuinfo
system type             : Ralink SoC
processor               : 0
cpu model               : MIPS 24K V4.12
BogoMIPS                : 266.24
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 32
extra interrupt vector  : yes
hardware watchpoint     : yes
ASEs implemented        : mips16 dsp
VCED exceptions         : not available
VCEI exceptions         : not available

mtd
# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00030000 00010000 "Bootloader"
mtd1: 00010000 00010000 "Config"
mtd2: 00010000 00010000 "Factory"
mtd3: 00130000 00010000 "Kernel"
mtd4: 00230000 00010000 "RootFS"
mtd5: 00050000 00010000 "User_CFG"

ไฟล์ MTD ที่ Backup มา