DIR825. Memory MOD.

Материал данной статьи любезно предоставлен сайту автором под ником «vavasik»

Задача: методом перепайки чипов в роутере увеличить ОЗУ с 64 МБ до 128 МБ.

Причина: Использую роутер как маленький NAS, торентокачалку-роздавалку, при этом имею интернет в виде витой пары со статической адресацией со скоростью 100 Мбит. Роутер перешит под OpenWRT, поднят Transmission Daemon, Samba 3. На скоростях под 100Мб и 64МБ памяти на роутере скорость скачивания/раздачи в трансмишине превращается в «пилу» от 512КБ до 5МБ, причем заметно, что роутеру не хватает памяти, и он начинает свапится на флешку один из разделов на которой выделен под свап.

Кратко http://www.atheros.com/pt/bulletins/AR9002AP-4XHGBulletin.pdf — оказывается DIR-825 основывается на референсном дизайне Атероса…

Внимание: необходимо вскрывать роутер, что ведет за собой потерю гарантии!

ВСЕ ЧТО ВЫ ДЕЛАЕТЕ С РОУТЕРОМ,
ВЫ ДЕЛАЕТЕ НА СВОЙ СТРАХ И РИСК!

АВТОР ЗА ВОЗМОЖНЫЕ ПОСЛЕДСТВИЯ
ОТВЕТСТВЕННОСТИ НЕ НЕСЕТ!

Данная статья – это обобщение моих постов с форума IXBT  (http://forum.ixbt.com/topic.cgi?id=14:49819) с некоторыми уточнениями.

Последовательность действий:

1.      Перепрошивка роутера фулфлешем от Netgear WNDR3700
2.      Перепайка микросхем.

Перепрошивка.

Для того что бы успешно провести данный мод, необходимо залить фулфлеш от Netgear WNDR3700 в DIR-825. Данная процедура необходима из-за того, что загрузчик U-Boot 1.1.4  от DIR-825 не может запустить ядро Linux на котором собраны прошивки для DIR-825 при 128МБ ОЗУ.

Перепрошивку я выполнял на методом прямого (непосредственно подпаивание к микросхеме) программирования SPI Flash, в котором содержится прошивка роутера, через LPT порт.

Последовательность действий:

1.      Разбираем роутер.

2.      Впаиваем в пустые отверстия JP1 штырьки для Serial console (можно использовать пины от старой мат. платы), для мониторинга загрузки системы после перепрошивки фулфлеша.  Распиновка разъема:

PIN1–>3.3V
PIN2–>RX
PIN3–>TX
PIN4–>GND

Параметры COM порта 115200/8/1/0/non

3.       Используем кабель для подключения к serial console, кабель можно изготовить самому на MAX232 или использовать готовый для подключения мобильных телефонов к компьютеру, я использовал кабель от старого телефона Siemens M55 собранный на микросхеме PL-2303, можно использовать и кабеля от других моб. телефонов кабеля которых создают виртуальный COM порт.
4.       Проверяем работу serial console. Подключаем к компьютеру и роутеру кабель запускаем терминальный клиент, я использовал PuTTy http://www.chiark.greenend.org.uk/~sgtatham/putty/

После включения роутера Вы должны увидеть
сообщения во время загрузки роутера:

U-Boot 1.1.4 (Apr 9 2009 — 12:01:01)

AP94 (ar7100) U-boot 0.0.12
HTTP-UID AP94: DRAM: b8050000: 0xc0140180
64 MB
Top of RAM usable for U-Boot at: 84000000
Reserving 214k for U-Boot at: 83fc8000
Reserving 192k for malloc() at: 83f98000
Reserving 44 Bytes for Board Info at: 83f97fd4
Reserving 36 Bytes for Global Data at: 83f97fb0
Reserving 128k for boot params() at: 83f77fb0
Stack Pointer at: 83f77f98
Now running in RAM — U-Boot at: 83fc8000
ar7100 flash_init: start
ar7100_spi_flash_unblock: start
ar7100_flash: id read: start
flash size 8MB, sector count = 128
Flash: 8 MB
Using default environment

In: serial
Out: serial
Err: serial
Net: eth_initialize: ag7100_enet_initialize
rtl8366sr_phy_setup ethUnit=0
ar7100.c: eth0 using default MAC: 00:26:5a:c7:71:2c
eth0 up
ar7100.c: eth1 using default MAC: 00:26:5a:c7:71:2d
eth1 up
eth0, eth1
### main_loop entered: bootdelay=1

### main_loop: bootcmd=»bootm 0xbf050000″
Hit any key to stop autoboot: 1 0
### main_loop: no key string, allow autoboot
### main_loop: abortboot
## Booting image at bf050000 …
checksum:84d8de18
Image Name: MIPS OpenWrt Linux-2.6.32.10
Image Type: MIPS Linux Kernel Image (lzma compressed)
Data Size: 883790 Bytes = 863.1 kB
Load Address: 80060000
Entry Point: 80060000
Verifying Checksum … OK
LZMA Umcompressing Kernel Image … Image loaded from 80060000-802f6a88
OK
Boot image os 5=IH_OS_LINUX
## do_bootm_linux start….
No initrd
## Transferring control to Linux (at address 80060000) …
## Giving linux memsize in bytes, 67108864

Starting kernel …

Если Вы не видите этих сообщений, то что-то не так с Вашим кабелем, портом…. найдите ошибку и устраните.

5.       Находим микросхему SPI Flash Spansion S25FL064A корпус SO3 016 wide, размещена на обратной стороне печатной платы роутера. Даташит на нее http://www.spansion.com/Support/Datasheets/S25FL064A_00_C4_e.pdf

6.       Вариантов прямого программирования SPI Flash может быть несколько: использование программатора с выпаиванием флеша, использование JTAG (у меня не получилось использовать Wiggler JTAG, я программировал через LPT), программирование с помощью переходника через LPT порт.

7.       Спаять переходник на LPT порт, схема тут http://rayer.ic.cz/elektro/spipgm.htm, но в статье она для другого типа микросхемы (спасибо за ссылки lprot с форума IXBT).

В нашем случае соответствие выводов такое:

DB25 #PIN     м/сх S25FL064A #PIN

7————[150R]————7
10———[150R]————8
8————[150R]———-16
9————[150R]———-15
18—————————-10 GND или на близлежащую «землю» на плате

Я использовал ленточный кабель с многожильными проводниками от старого 40 пинового шлейфа ATA, чередуя сигнальные проводники с землей для большей помехоустойчивости.
Необходимо отметить, что длина кабеля должна быть минимально возможной, у меня получилось около 10-12 см.
Фото кабеля: http://images.4m.net.ua/images/86098268307367770773.jpg

8.       Подключение к микросхеме флеша:

Если нет внешнего блока питания на +3,3V то необходимо приподнимать ноги к которым будем аккуратно подпаиваться.

ВНИМАНИЕ: осторожно с приподниманием ножек микросхемы они очень хрупкие и существует большая вероятность их отломать при корпусе.

Чтобы не отломать ножки м/сх, я сделал внешний блок питания на +3,3V, использовал интегральный стабилизатор напряжения на +3,3V от старой материнской платы и блок питания от кармана внешнего жесткого диска на +5V и +12V. «+3,3V» питания подается на ногу «2» S25FL064A. Возможно, можно использовать две больших батарейки типоразмер «D» по 1,5В вместо блока питания, но с батарейками я не пробовал…

9.       Подключаем подпаянный к чипу переходник на LPT и подаем питание +3,3V с собранного блока питания
или батареек, должны засветиться светодиоды на плате.

10.       Итак, если все сделано правильно, качаем программу прошивки со ссылки http://rayer.ic.cz/programm/programm.htm#SPIPGM. Определить микросхему с ключом /i
Должно выдать:

SPI connected to LPT port at I/O base address: 378h, SCK pulse width: t+0us FlashROM JEDEC ID, type: 010216h Spansion S25FL064A (8MB)

… Если не определяется значит ошибка в подключении или провода слишком длинные, так у меня поначалу было.
Считать ДВА раза подряд содержимое флеша в файл и сверить оба файла ( fc /b имя_файла имя_файла2 ),  если различий нет, значит файл считан без ошибок. Если ошибки есть то укорачивать провода.

11.   Скачать фулфлеш от Netgear WNDR3700 отсюда: http://upload.com.ua/get/901949950/128M-dir-825-to-N…gear-WNDR3700.zip

12.   Перед заливкой прошивки, разрешить запись микросхему с ключом /u

13.   Стереть флеш с ключом /e

14.   Прошить флеш ключ /p [имя.прошивки]

15.   Слить флеш в файл ключ /d [имя.прошивки]

16.   Проверить запись, считать в файл записанное и сверить с файлом который заливали fc /b имя_файла имя_файла2

17.  Отключаем LPT, отключаем внешнее питание, пытаемся загрузится с наблюдением процесса загрузки в терминальной программе через serial console, должно выдать:

(ниже приведен лог с уже впаянной памятью, при 64МБ значения количества памяти будут другими)

U-Boot 1.1.4DNI1.6 (May 22 2009 — 16:37:44)
WNDR3700U (ar7100) U-boot 0.0.12
DRAM:  b8050000: 0xc0140180
128 MB
Top of RAM usable for U-Boot at: 88000000
Reserving 315k for U-Boot at: 87fb0000
Reserving 192k for malloc() at: 87f80000
Reserving 44 Bytes for Board Info at: 87f7ffd4
Reserving 36 Bytes for Global Data at: 87f7ffb0
Reserving 128k for boot params() at: 87f5ffb0
Stack Pointer at: 87f5ff98
Now running in RAM — U-Boot at: 87fb0000
id read 0x100000ff
flash size 8MB, sector count = 128
Flash:  8 MB
*** Warning — bad CRC, using default environment

 In:    serial
Out:   serial
Err:   serial
Net:   ag7100_enet_initialize…
CHH:mac: 0 if: 2

CHH:mac:verify: 0 if: 00000002
: cfg1 0xf cfg2 0x7014
eth0: c0:3f:0e:7f:26:1f
eth0 up
CHH:mac: 1 if: 1
CHH:mac:verify: 1 if: 00000001
: cfg1 0xf cfg2 0x7014
eth1: c0:3f:0e:7f:26:20
eth1 up
eth0, eth1
Trying eth0
: unit 0 phy is up…RGMii 1000Mbps full duplex
#259:ag7100_set_mac_from_link
: pll reg 0x18050010: 0x11110000
: cfg_1: 0x1ff0000
: cfg_2: 0x3ff
: cfg_3: 0x8001ff
: cfg_4: 0xffff
: cfg_5: 0xfffef
: done cfg2 0x7215 ifctl 0x40605060 miictrl 0x22

 Client starts…[Listening] for ADVERTISE…TTT
Retry count exceeded; boot the image as usual

 nmrp server is stopped or failed !
Hit any key to stop autoboot:  1  0
   Verifying Checksum … OK
### SQUASHFS loading ‘image/uImage’ to 0x80800000
### SQUASHFS load complete: 886690 bytes loaded to 0x80800000
## Booting image at 80800000 …
   Image Name:  MIPS OpenWrt Linux-2.6.32.16
   Created:    2010-08-25  22:27:19 UTC
   Image Type:  MIPS Linux Kernel Image (lzma compressed)
   Data Size:   886626 Bytes = 865.8 kB
   Load Address: 80060000
   Entry Point: 80060000
   Verifying Checksum … OK
   Uncompressing Kernel Image … OK
Noinitrd
##Transferring control to Linux (at address 80060000) …
##Giving linux memsize in bytes, 134217728

На данном этапе мы получили WNDR3700 от Netgea вместо DIR-825. Далее можно приступать к перепайке чипов памяти:

Уточнение по поводу перепайки чипов памяти:

Так как на плате разведены все линии адресации на 128МБ изначально, ничего кроме самих микросхем на плату допаивать ненужно, главное во время выпаивания не «сдуть» СМД компоненты близлежащие к микросхемам. Для выпаивания использовался фен паяльный, впаивание м-сх производилось паяльником для СМД монтажа, на этом этапе лучше обратиться к профессионалам в этом деле. (МЕГОСПАСИБО НИКОЛАЮ ЖУКОВУ г. Бела Церковь, Украина)

В DIR-825 rev.:B2 используются две микросхемы DDR в корпусе TSOP 66 c организацией 16Mx16 что в сумме дает 64МБ, MOSEL VITELIC V58C2256164SC15 даташит на них тут: http://pdf1.alldatasheet.net/datasheet-pdf/view/2414/MOSEL/V58C2256164S.html

Микросхема памяти на плате DIR-825

http://images.4m.net.ua/images/40186886087248680668.jpg

Для замены я использовал выпаянные микросхемы из модуля Samsung DDR SO-DIMM 512MB организацией 32Mx16  тип K4H511638D-UCB3  фото: http://images.4m.net.ua/images/43227162731589091754.jpg

Возможно использовать и микросхемы других производителей только организация должна быть 32Мх16, микросхемы с другой организацией, например 64Мх8 не подойдут.
Если оба чипа нормально перепаяны то роутер должен проснуться как Netgear WNDR3700 со 128МБ памяти, останется только установить OpenWRT так как фирмовая прошивка от Netgear не умеет использовать 128МБ, хотя ей загрузчик передает перед загрузкой полный объем памяти, все 128МБ.

10.10.2010