Про JTAG — отладчик

На начальном этапе запуска железки всегда очень много вопросов. Особенно
когда что-нибудь не работает или нет понимания, как должно работать, да и
вообще обычно больше вопросов, чем ответов.

Этот раздел содержит рабочие варианты логов, команд, алгоритмов отладки, на которые можно ориентироваться и сравнивать со своими, чтобы понять, что именно не работает.

Пример работы с jtag отладчиком peedi.

Подключение к отладчику peedi может осуществляться через последовательный порт
rs232 и через сетевой порт эзернет с помощью утилиты telnet.

Для получения информации о сетевых настройках peedi нужно воспользоваться
подключением через последовательный порт rs232. Лог загрузки:

Starting Redboot v11.4.15 ...
Platform: PEEDI
RAM: 0x00000000-0x00800000 [0x0000db48-0x007e1000 available]
FLASH SST39VF3201B: 0x05800000-0x05bfffff, 64 x 0x10000 blocks

*** INFO: to enter RedBoot restart while holding both buttons pressed ***

== Executing boot script
RedBoot> fis load peedi; go
Please wait... 
+++++

Network:
  IP address         : 192.168.1.1
  Subnet mask        : 255.255.255.0
  Gateway            : 192.168.1.1
  MAC address        : 02:00:14:86:67:0b


PEEDI - Powerful Embedded Ethernet Debug Interface
Copyright (c) 2005-2011 www.ronetix.at - All rights reserved
Hw:1.2, Fw:11.5.12, SN: PD-0000-1486-670B
------------------------------------------------------------

Сетевые настройки peedi доступны для изменения из redboot. Для того, чтобы попасть в redboot, нужно зажать две кнопки на передней панели и выполнить сброс с помощью кнопки сброса. Для изменения сетевых настроек нужно в командной строке redboot выполнить команду fconfig:

RedBoot> fconfig

Подключение к jtag отладчику peedi через telnet:

$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.

PEEDI - Powerful Embedded Ethernet Debug Interface
Copyright (c) 2005-2011 www.ronetix.at - All rights reserved
Hw:1.2, L:JTAG v1.5 Fw:11.5.12, SN: PD-0000-1486-670B
------------------------------------------------------------

После старта или после выполнения команды reset, peedi выполняет инициализацию железки согласно конфигурационному файлу. Отладчик peedi должен получить конфигурационный файл через tftp протокол. Путь, где будет произведен поиск конфигурационного файла, можно увидеть с помощью команды config:

mrv> config
Current config file -> tftp://192.168.1.10/mrv.cfg

Конфигурационный файл лучше взять какой-нибудь готовый, но изменить в нём инициализацию, согласно со своим аппаратным обеспечением.

Пример инициализации:

; dram init
mem wr 0xD0001400 0x4301503E ;  DDR SDRAM Configuration Register
mem wr 0xD0001404 0x39943000 ;  Dunit Control Low Register

запись mem wr 0xD0001400 0x4301503E означает выполнить команду
memory write 0xD0001400 0x4301503E, т.е. установить в регистре 0xD0001400 значение 0x4301503E.

Если файл удачно загрузился, то лог будет выглядеть так:

peedi> ++ info: opening file 'tftp://192.168.1.10/mrv.cfg'
++ info: loading file 'tftp://192.168.1.10/mrv.cfg' ...
++ info: done, loaded 3475 meaningful bytes.
++ info: opening file 'eep:license.txt'
++ info: loading file 'eep:license.txt' ...
++ info: done, loaded 146 meaningful bytes.
++ info: serial to telnet disabled

Если процессор на платке корректно проинициализировался, то лог будет выглядеть так:

++ info: RESET and TRST asserted
++ info: TRST released
++ info: BYPASS check passed
++ info: 1 TAP controller(s) detected
++ info: TAP : IDCODE = 0x20A023D3, Marvell 88F6281 -> CORE0
++ info: RESET released
++ info: core 0: initialized

Если оперативная память проинициализировалась, то выполнение команд
группы memory должно отрабатываться корректно. Т.е. последовательные операции записи и чтения должны давать желаемый результат:

mrv> memory write 0x2000000 0xaa55 50
mrv> memory read 0x2000000 50        

0x2000000: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x2000010: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x2000020: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x2000030: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x2000040: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x2000050: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x2000060: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x2000070: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x2000080: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x2000090: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x20000A0: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x20000B0: 0x0000AA55 0x0000AA55 0x0000AA55 0x0000AA55
0x20000C0: 0x0000AA55 0x0000AA55

Также можно проверить состояние ранее установленных регистров:

mrv> memory read 0xD0001400
0xD0001400: 0x4301503E

Если флеш память проинициализировалась, то выполнение команд группы flash должно отрабатываться корректно (следует учесть, что обращение к флеш памяти не будет доступно, если оперативная память не проинициализирована):

mrv> flash info

FLASH configuration for core #0:
  NAND ID   : 0x20, 0xDC, 0x10, 0x95, 0x54
  NAND Flash: ST, ID=0xDC, 8-bit, 512 MB
    number of dies       = 1
    cell type            = 2-level cell
    page size            = 2048 + 64 bytes
    pages per block      = 64
    number of blocks     = 4096
    number of bad blocks = 0 (use "flash query" to get the list)
    erase bad blocks     = false

OOB Info:   FF
Burst mode: no

Обращение к флеш памяти без инициализации оперативной памяти:

mrv> flash info 
-- error: unable to load agent at address 0x00000000
-- error: cannot start FLASH agent
-- error: unable to start flash programmer

Чтение флэш памяти по адресу 0x0000, где расположен u-boot:

mrv> flash read 0x0000 100 

Block 0, Page 0 (absolute 0) - DATA:
0x0000: 8B 00 00 08 1C 3C 07 00 - 00 00 00 00 00 02 00 00 
0x0010: 00 00 60 00 00 00 67 00 - 00 00 00 00 00 00 01 BC 
0x0020: 40 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 
0x0030: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 
0x0040: E0 00 D1 FF 9B 1B 1B 1B - 00 14 D0 FF 3E 50 01 43 
0x0050: 04 14 D0 FF 00 30 84 B9 - 08 14 D0 FF 63 76 13 33 
0x0060: 0C 14 D0 FF 3A 0C 00 16 - 10 14 D0 FF CC 00 00 04 

Полезные команды peedi:

reset run - сбросить и запустить на выполнение прошивку, которая стартует по умолчанию из памяти.

reset reset - сбросить и остановить процессор.

проверка оперативной памяти (загрузка образа и затем его сравнение с эталоном):
memory load tftp://192.168.1.10/mrv/uImage bin 0x000000
memory verify tftp://192.168.1.10/mrv/uImage bin 0

memory read 0x10000000 - чтение по адресу 256 мегабайт
memory write 0xffffff8 0x87654321 - запись по адресу (256 мегабайт-8 байт)