Andrey писал(а):
expflash писал(а):
Здравствуйте. Нельзя ли огласить полный список ISC иструкций (IEEE 1532) поддерживаемых 5576РC1У?
Есть необходимость удаленного изменения прошивки посредством стандартного интерфейса (СОМ например).
У меня получается записать и считать данные, но не стереть.
Весь алгоритм программирования легко посмотреть в файле svf - serial vector format, который создаётся средствами quartus ((Programmer) File menu, Create Jam or SVF File File menu, Create/Update, Create JAM, SVF, or ISC File).
Для стирания необходимо стереть все сектора памяти в svf файле это выглядит так
SIR 10 TDI (192);
SDR 23 TDI (000000); - здесь адрес начала сектора, таких адресов помимо этого ещё 2000, 3000, 4000, 10000, 20000, 30000
RUNTEST 40000000 TCK;
после последовательного стирания всех секторов память сотрётся.
Все инструкции указаны в epc4q100_1532.bsd
Здравствуйте! вопросы возникают при попытке выполнить blank_check
Как и в указанном bsd-файле, выполняю следующие команды
"FLOW_BLANK_CHECK " &
"INITIALIZE" &
"(ISC_READ WAIT TCK 1 16:DFFF*0000, 2:2*0) "&
"(ISC_ADDRESS_SHIFT 23:000000 WAIT TCK 1)" &
"(ISC_READ WAIT TCK 1 18:3FFFE*FFFFF)" &
"REPEAT 249999 " &
"(ISC_READ WAIT TCK 1 18:3FFFE*FFFFF)," &
т.е. ставллюсь в начальный адрес памяти и читаю ячейки, однако приходят слова не 3FFFE (10 в двух младших битах), а 3FFFF.
пишу на STAPL, но смысл, думаю, понятен. код выглядит так:
Код:
PROCEDURE do_blank_check USES instructions, var, exiting, bin2hex;
IRSCAN IR_LEN, $10E;
DRSCAN 23, $008000;
WAIT 50 CYCLES;
IRSCAN IR_LEN, $1A6;
WAIT 1000 CYCLES;
FOR i = MIN_ADDR TO MAX_ADDR;
WrData[DATA_LEN+ST_LEN-1..ST_LEN] = $FFFF;
WrData[ST_LEN-1..0] = #10;
DRSCAN DATA_LEN+ST_LEN, 3FFFF, CAPTURE ALL0[DATA_LEN+ST_LEN-1..0], COMPARE WrData[], $3FFFF, match;
IF match == 1 THEN GOTO blank_check_next_word;
PRINT "ERROR: verify failure!";
bin32[15..0] = ALL0[DATA_LEN+ST_LEN-1..ST_LEN];
CALL bin2hex;
PRINT "DATA = ", CHR$(hex32[3]), CHR$(hex32[2]), CHR$(hex32[1]), CHR$(hex32[0]);
exitcode = 9;
IRSCAN IR_LEN, $03E;
'IRSCAN IR_LEN, ISC_DISABLE[(IR_LEN-1)..0];
WAIT IDLE, 200 CYCLES;
CALL exiting;
blank_check_next_word:
NEXT i;
IRSCAN IR_LEN, $03E;
WAIT 200 CYCLES;
DRSCAN DATA_LEN+ST_LEN, 3FFFF, COMPARE $00002, $00003, match;
ENDPROC;
подскажите, пожалуйста, в чем тут дело?