Восстановление убитого MagicBox HDR895D (часть 1, неудачная)

Sep 07, 2012 23:28

У настоящего инженера всегда чешутся руки что-нибудь такого наинженерить...
Имеется в наличии такое чудо: MagicBox HDR895D (http://www.g-mini.ru/products/7). Убит программно напрочь, то есть совсем... Может только включится и выключится с пульта. Не показывает ничего. Но железо в рабочем состоянии.
Доведен до такого состояния двумя парами шаловливых ручек. Первые ручки залили на него прошивку от другого плеера (через штатное обновление), вторые ручки вместе с левой прошивкой снесли бутлоадер (через telnet консоль). Нетрудно догадаться, что последнюю хитрую комбинацию исполнил я...
Вот такая грустная история... НО! Будем воскрешать!
Вскрытие пациента и недолгое гугление показывает, что живет он на чипсете RealTek RTD 1283.
Ethernet у пациента явно не фурычит (индикаторы горят все, и не гаснут), будем искать другие "входы".
На плате очень вероятно присутствует JTAG разъем, но его искать даже не буду (скорее всего без специального программатора ничего не сделаешь).
На форуме оф. сайта удается найти инфу про RS порт на плате (http://g-mini.ru/forum/topic/1650/). Разъем CN2 (6-пиновый). Порт работает на TTL уровнях, нужен преобразователь. В закромах находим преобразователь (http://sun-store.ru/product_275.html). С помощью мерцания его светодиодов удалось выяснить распиновку (1 - GND, 2 - Rx, 3 - Tx).
Все замечательно, но в доме нет ни одного компа с RS портом... пичалька...

Но мы пойдем другим путем. Я начнающий ардуинщик... Поэтому, имеется в тех же закромах: Arduino UNO и Arduino Ethernet Shield. Из этого набора попробуем смонстрячить преобразователь RS-Ethernet.
Берем IDE и набрасывем нехитрый код:

#include
#include

byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(10, 236, 255, 177);
IPAddress gateway(10, 236, 255, 1);
IPAddress subnet(255, 255, 255, 0);

EthernetServer server(23);
boolean alreadyConnected = false;

void setup()
{
// initialize the ethernet device
Ethernet.begin(mac, ip, gateway, subnet);
// start listening for clients
server.begin();
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial)
{
; // wait for serial port to connect. Needed for Leonardo only
}
}

void loop()
{
// wait for a new client:
EthernetClient client = server.available();

// when the client sends the first byte, say hello:
if (client)
{
if (!alreadyConnected)
{
// clead out the input buffer:
client.flush();
alreadyConnected = true;
}

while(client.available() > 0)
{
// read the bytes incoming from the client:
char c = client.read();
// echo the bytes back to the client:
//server.write(thisChar);
// echo the bytes to the server as well:
Serial.write(c);
}
}

if(alreadyConnected)
{
while( Serial.available() > 0 )
{
char c = Serial.read();
server.write(c);
}
}

}

Айпишнег - моя домашняя сеть, тело общается по RS на скорости 115200.
Соединяем, запускаем, алилуя! От тела приходит сообщение "s/d/g/c>". Судя по всему он вопрошает нас хотя бы о какой-то программе.
Погуглив запрос "rtd 1328 bootloader" находится такая ссылка http://code.google.com/p/xtreamerdev/downloads/detail?name=rtdsr_0.6.7z
По описанию все подходит, но! Как отправить файл по протоколу YMODEM?
В линуксе находится программа sz. Она даже работает по TCP! Но тут настигает большой облом... Из-за особенностей реализации библиотек Arduino (возможно) некорректно обрабатывается прием блока информации по TCP (очень похоже, что пока не придет по сети символ новой строки, то данные в основной цикл не выкидываются).

Вообщем, попытка - не зачет... Завтра в магаз за преобразователем USB-RS...
Previous post Next post
Up