[an error occurred while processing this directive]
|
У меня были проблемы с попаданием в режим программирования, в связи с чем завел в качестве входа сигнал RST и опрашиваю его, если процессор действительно аппаратно (тумблером) перевели в него, только после этого посылаю в чип команду Programming Enable. Но даже в этом случае не всегда срабатывало, поэтому дополнительно пишу в последний байт EEPROM маркер и проверяю его, если совпал - считаю, что режим программирования установлен и перехожу к дальнейшим операциям. Здесь есть одно но, если чип залочен, перед записью маркера пытаюсь очистить его командой Erase. Код на C ниже:
void spi_open(char cmd) {
char i, rst = 1;
atexit(spi_close);
outp(port + 4, ~oSCK | ~oMOSI);
while(1) {
if(rst) cprintf("Take up RST key ...\n");
if(kbhit()) exit(EXIT_SUCCESS);
if(rst = inp(port + 6) & ~iRST) {
cprintf("Wait ");
delay(10);
for(i = 0; i < 30; i++) {
outp(port + 4, ~oSCK | ~oMOSI);
spi_out(0xAC);
spi_out(0x53); spi_out(0x53);
delay(1);
switch(cmd) {
case cERASE:
spi_out(0xAC);
spi_out(0x04); spi_out(0x04);
delay(32);
default:
spi_out(0x06 | (MARKADR >> 5 & 0x38)); spi_out(MARKADR);
spi_out(MARK);
delay(ms);
spi_out(0x05 | (MARKADR >> 5 & 0x38)); spi_out(MARKADR);
if(spi_in() == MARK) { cprintf(" Ok\n"); return; }
else cprintf(".");
break;
}
}
cprintf(" Error\n");
}
}
}
E-mail: info@telesys.ru