Программа на asm.
Код
mov r0,#0x40000000
add r0,r0,#0xD100 // r0 = 4000 D100 - адрес начала таблицы команды и параметров
mov r1,r0
add r1,r1,#0x100 // r1 = 4000 D200 - адрес начала таблицы результатов
mov r2,#0x54 // команда 54h - чтение PART ID
str r2,[r0]
mov r2,#0x7f000000
add r2,r2,#0xff0000
add r2,r2,#0xff00
add r2,r2,#0xf1 // r2=0x7ffffff1 (режим arm)
mov r14,r15 // сохраняем адрес возврата в регистре связи
bx r2 // собственно вызов
add r0,r0,#0xD100 // r0 = 4000 D100 - адрес начала таблицы команды и параметров
mov r1,r0
add r1,r1,#0x100 // r1 = 4000 D200 - адрес начала таблицы результатов
mov r2,#0x54 // команда 54h - чтение PART ID
str r2,[r0]
mov r2,#0x7f000000
add r2,r2,#0xff0000
add r2,r2,#0xff00
add r2,r2,#0xf1 // r2=0x7ffffff1 (режим arm)
mov r14,r15 // сохраняем адрес возврата в регистре связи
bx r2 // собственно вызов
Прошиваем и смотрим в дебаггере результаты.
Содержимое адреса [4000 D200] , т.е. начало таблицы результатов, равно 1, судя по описанию, это INVALID_COMMAND (более в таблице иных результатов нет).
Что тут может быть неверно?