Про 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 байт)