Отладочная плата EV-L138/AM1808-Lite
Плата EV-L138/AM1808-Lite может комплектоваться процессором OMAP-L138 (два ядра ARM926 + DSP C674x) или процессором AM1808 (только ядро ARM926). Соответственно примеры использующие DSP ядро
на плате с процессором AM1808 работать не будут.
На плате опционально может быть установлена микросхема SPI Flash памяти MX25L6406.
Основные отличия ревизии платы v2.1 от v2.0:
Правим при необходимости board file (/home/evodbg/Projects/ buildroot-2012.02/output/build/uboot-v2009.11_DAVINCIPSP_03.20.00.14/board/davinci/da8xxevm/l138_owlboard_plus.c)
Запускаем скрипт для сборки make_u-boot.sh (/home/evodbg/Projects/buildroot-2012.02/output/build/uboot-v2009.11_DAVINCIPSP_03.20.00.14/make_u-boot.sh)
Запускаем AISgen for D800K008, загружаем файл конфигурации ev-am1808.cfg (File-Load Configuration)
Указываем исходный ELF файл u-boot в DSP Application File
Указываем выходной файл, например u-boot.bin
Нажимаем Generate AIS
Для записи «обернутого» образа u-boot в NAND Flash устанавливаем BOOT перемычки в режим UART2 (1010)
Подключаем COM кабель к компьютеру и плате и подаем питание на плату
Запускаем утилиту sfh_OMAP-L138.exe cо следующими параметрами (или bat файл )
sfh_OMAP-L138.exe -flash_noubl -flashType NAND -p COM1 u-boot.bin
Где COM1 - номер COM порта компьютера, к которому подключена плата
u-boot.bin - имя «обернутого» файла u-boot
Нажимаем кнопку сброса на плате, начнется процесс передачи и записи файла.
После окончания программирования отключаем питание, устанавливаем BOOT перемычки в режим загрузки с NAND Flash, подаем питание
В консоли можно увидеть загрузку u-boot.
Прерываем загрузку u-boot нажатием на любую кнопку.
Задаем переменные окружения (Загрузка ядра по TFTp, файловая система NFS):
setenv serverip 192.168.0.101 Задаем IP адрес сервера\\ setenv ipaddr 192.168.0.108 Задаем IP адрес сервера setenv bootargs 'ip=192.168.0.103:192.168.0.101:192.168.0.1:255.255.255.0:1808 rootdelay=3 root=/dev/nfs nfsroot=192.168.0.101:/tftpboot/rootfs rw mem=128M ' Задаем строку аргументов \\ setenv bootcmd 'tftpboot 0xc0700000 uImage; bootm 0xc0700000' Задаем строку загрузки \\
Загрузка ядра из NAND Flash, файловая система в NAND Flash
setenv bootargs 'ip=192.168.0.103:192.168.0.101:192.168.0.1:255.255.255.0:1808 rootfstype=ubifs root=ubi0:rootfs ubi.mtd=ubi rw mem=128M' setenv bootcmd 'nand read.e 0xc0700000 kernel; bootm 0xc0700000'
Загрузка ядра с SD карты
setenv bootcmd 'mmc init; fatload mmc 0:1 0xc0700000 uImage; bootm 0xc0700000'
Загрузка ядра с USB Flash
setenv bootcmd 'usb start; fatload usb 0:1 0xc0700000 uImage; bootm 0xc0700000'
Файловая система на HDD
setenv bootargs 'ip=192.168.0.103:192.168.0.101:192.168.0.1:255.255.255.0:1808 mem=128M console=ttyS2,115200n8 root=/dev/sda1 rootwait'
Записываем u-boot, как описано выше.
Записываем на USB Flash Drive папку Owlboard из архива safe_evam1808.zip
В папке Owlboard присутствуют файлы:
В папке Owlboard/boot находится файл uImage с встроенной файловой системой, который после первоначальной загрузки обеспечивает запись в NAND Flash вышеперечисленных файлов.
Вставляем флешку в верхней разъем USB, устанавливаем перемычку на разъем X18 в положение 1-2
Устанавливаем BOOT перемычки в режим загрузки с NAND (0001)
Подаем питание на плату. Процесс записи должен запуститься автоматически.
Если процесс записи не стартовал (это может произойти, если ранее уже были записаны переменные окружения), набираем в консоли:
nand erase 0 0x20000
Эта команда сотрет блок с переменными окружения
или принудительно загружаем с USB Flash
usb start fatload usb 0:1 0xc0700000 /Owlboard/boot/uImage bootm 0xc0700000"
Ждем окончания записи.
Правим при необходимости board file (/home/evodbg/Projects/buildroot-2012.02/output/build/linux-v2.6.37_DAVINCIPSP_03.21.00.04/arch/arm/mach-davinci/board-l138-owlboardplus.c)
Запускаем скрипт для сборки make_uImage.sh (/home/evodbg/Projects/buildroot-2012.02/output/build/linux-v2.6.37_DAVINCIPSP_03.21.00.04/make_uImage.sh)
Запуск меню-конфиг
/home/evodbg/Projects/evodbg/buildroot-2012.02/make menuconfig
Для запуска сборки файловой системы
/home/evodbg/Projects/evodbg/ buildroot-2012.02/make
Подключить дисплей с помощью 30-жильного кабеля к плате.
И к дисплею.
Поскольку микросхема контроллера экрана TPS65070 имеет собственный контроллер тачскрина,
необходимо с помощью перемычек отключить микросхему TSC2046 (ADS7846) установленную на дисплее.
На дисплеи установить перемычки J4, J5, J8, J9, J10 в положении 1-2. Снять перемычки J2, J3, J6, J7.
Перед использованием панели надо откалибровать тачскрин, нажав последовательно на 5 точек в углах и центре экрана
ts_calibrate
Затем можно запустить тест и порисовать:
ts_test
Подключаем HDD стандартным SATA кабелем. В данном случае подключен HDD 2.5» от ноутбука, питание 5В подано извне.
При старте ядра можно увидеться строки, что HDD найден:
[ 2.160174] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 2.421254] ata1.00: ATA-8: ST9250410ASG, 0004SDM1, max UDMA/133 [ 2.427345] ata1.00: 488397168 sectors, multi 16: LBA48 NCQ (depth 31/32) [ 2.452895] ata1.00: configured for UDMA/133 [ 2.471582] scsi 0:0:0:0: Direct-Access ATA ST9250410ASG 0004 PQ: 0 ANSI: 5 [ 2.502053] sd 0:0:0:0: [sda] 488397168 512-byte logical blocks: (250 GB/232 GiB) [ 2.512594] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 2.531559] sd 0:0:0:0: [sda] Write Protect is off [ 2.537264] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2.592417] sda: sda1 [ 2.605219] sd 0:0:0:0: [sda] Attached SCSI disk
Монтируем диск:
root /root # mount /dev/sda1 /mnt [ 104.681721] NTFS volume version 3.1. root /root #
Тестирование скорости:
root /root # hdparm -tT /dev/sda /dev/sda: Timing buffer-cache reads: 58 MB in 0.51 seconds = 115620 kB/s Timing buffered disk reads: 61 MB in 3.01 seconds = 20727 kB/s root /root #
Вставляем карту формата microSD
root /root # [ 174.115490] mmc0: host does not support reading read-only switch. assuming write-enable. [ 174.125576] mmc0: new SD card at address 8fe4 [ 174.133519] mmcblk0: mmc0:8fe4 SU02G 1.84 GiB [ 174.148325] mmcblk0: p1 root /root #
Тест скорости:
root /root # hdparm -tT /dev/mmcblk0 /dev/mmcblk0: Timing buffer-cache reads: hdparm: HDIO_DRIVE_CMD: Inappropriate ioctl for device 48 MB in 0.52 seconds = 93151 kB/s Timing buffered disk reads: 25 MB in 3.03 seconds = 8436 kB/s hdparm: HDIO_DRIVE_CMD: Inappropriate ioctl for device root /root #
J-Link поддерживает работу с ядром ARM9 имеющееся в процессорах OMAP-L138 и AM1808.
Отладка DSP ядра не поддерживается!
Соединяем одноименные сигналы разъемов JTAG эмулятора (в данном случае используется JetlinkPro) и платы EV-AM1808/L138
Слева сигналы разъема JTAG эмулятора, справа - сигналы разъема JTAG платы с процессором OMAPL138 или AM1808
VTREF - VCC_3V3D
GND - GND
TSRT - TRST
TDI - TDI
TDO - TDO
TMS - TMS
TCK-TCK
RTCK - RTCK
Запускаем утилиту J-Link.exe из ProgrammFiles/Segger/JLinkARM_xxx/Jlink.exe
Видно, что цепочка найдена, но процессор не опознан.
Копируем скрипт OMAP-L138.JlinkScript из папки \ProgramFiles\SEGGER\JLinkARM_xxx\Samples\JLink\Scripts\OMAP-L138.JLinkScript
в папку с утилитой Jlink.exe (ProgrammFiles/Segger/JLinkARM_xxx/) и переименовываем этот скрипт в default.c
Снова запускаем JLink.exe и видим, что процессор найден
Для отладки в среде IAR необходимо скопировать default.c в папку \ProgramFiles\IAR Systems\Embedded Workbench 6.4\arm\bin\default.c
Подключаем эмулятор XDS100v2 к плате (Одеваем его прямо на разъем), подключаем miniUSB кабель к эмулятору и подаем питание на плату
Запускаем Code Composer Studio (CCS)
Target - New Target Configuration
Придумываем имя для конфигурации
В выпадающем списке Connection выбираем эмулятор XDS100v2, в Device устанавливаем галочку на OMAPL138, нажимаем кнопку Save
Target - Launch TI Debugger
Нажимаем правой кнопкой мыши на Texas Instruments XDS100v2 USB Emulator_0/ARM9_0 [Non-Project Debug Session] и выбираем Connect Target.
В board файле платы установлен по умолчанию композитный вход VI4A (.input = INPUT_CVBS_VI4A) (разъем X1 на плате видеозахвата)
Могут выбраны следующие входа:
VI2B - (.input = INPUT_CVBS_VI2B) разъем X2;
VI2A - (.input = INPUT_CVBS_VI2A) разъем X3;
VI2C_VI1C - (.input = INPUT_SVIDEO_VI2C_VI1C) разъем S-Video X4;
cd /media ./capture
gst-launch -v filesrc location=/home/root/john1808.mp4 ! qtdemux name=demux demux.audio_00 ! \ queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! TIAuddec1 ! \ alsasink demux.video_00 ! queue ! TIViddec2 ! TIC6xColorspace \ engineName=codecServer ! queue ! tidisplaysink2
Детектирование устройство на шине
root /media # i2cdetect -y -a -r 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 50: 50 51 52 53 54 55 56 57 -- -- 5a -- UU UU -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- root /media #
Прочитать регистр с адресом 0x00 в микросхеме с адресом 0x5d (TVP5147)
root /media # i2cget -f -y 1 0x5d 0x00 b 0x0c root /media #
Записать в регистр с адресов 0x00 в микросхеме с адресом 0x5d (TVP5147) значение 0x0C
i2cset -f -y 1 0x5d 0x00 0x0c b
Загрузчик u-boot используется такой же как и в предыдущем образе виртуальной машины.
Переменные окружения:
setenv serverip 192.168.0.101 IP адрес сервера с которого будет загружаться ядро setenv ipaddr 192.168.0.103 - IP адрес платы setenv bootcmd 'tftpboot 0xc0700000 uImage; bootm 0xc0700000' - команда загрузки и старта ядра setenv bootargs 'ip=dhcp root=/dev/nfs nfsroot=192.168.0.101:/tftpboot/targetfs rw mem=32M@0xc0000000 mem=64M@0xc4000000' - монтирование файловой системы NFS saveenv - сохранить переменные окружения
DVSDK установлено в /home/evodbg/Projects/ti-dvsdk_omapl138-evm_04_03_00_06
Сборка ядра - make linux
Файл uImage будет находиться в /home/evodbg/Projects/ti-dvsdk_omapl138-evm_04_03_00_06/psp/linux-2.6.37-psp03.21.00.04.sdk/arch/arm/boot
Полная сборка - make
Файловая система будет находиться в /home/evodbg/targetfs
Скопировать собранное ядро в targetfs/boot/ - sudo make linux_install (потребуется пароль администратора)
/etc/init.d/matrix-gui-e start
gst-launch videotestsrc ! video/x-raw-rgb ! fbdevsink
gst-launch videotestsrc ! video/x-raw-rgb, framerate=25/1, width=8 00, height=480 ! fbdevsink
Немного экспериментов с Web камерой. Использовалась Logitech C110, подключенная в разъем USB Full Speed, в системе /dev/video2
gst-launch v4l2src device=/dev/video2 ! ffmpegcolorspace ! fbdevsink
gst-launch v4l2src device=/dev/video2 ! video/x-raw-yuv, width=320,height=240 ! ffmpegcolorspace ! fbdevsink
gst-launch v4l2src device=/dev/video2 ! ffmpegcolorspace ! jpegenc ! tcpclientsink protocol=gdp host=192.168.0.101
gst-launch v4l2src device=/dev/video2 ! video/x-raw-yuv, width=320,height=240 ! ffmpegcolorspace ! jpegenc ! tcpclientsink protocol=gdp host=192.168.0.101
192.168.0.101 - в данном случае адрес хоста в сети, на котором также запускаем Gstreamer для приема видео. На нем запускаем:
gst-launch -v tcpserversrc host=0.0.0.0 protocol=gdp ! decodebin ! autovideosink
mount /dev/sda1 /mnt - монтируем флешку \\ gst-launch v4l2src device=/dev/video2 ! video/x-raw-yuv, width=320,height=240 ! ffmpegcolorspace ! TIVidenc1 codecName=mpeg4enc engineName=codecServer ! filesink location=/mnt/web.mp4 -v
gst-launch filesrc location=/mnt/web.mp4 ! typefind ! TIViddec2 ! queue ! TIC6xColorspace engineName=codecServer ! queue ! tidisplaysink2 -v
gst-launch -v filesrc location=/home/root/prometheus1808.mp4 ! qtdemux name=demux demux.audio_00 ! \ queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! TIAuddec1 ! \ alsasink demux.video_00 ! queue ! TIViddec2 ! TIC6xColorspace \ engineName=codecServer ! queue ! tidisplaysink2
Перекодировать ролики удобно с помощью утилиты handbrakehttp://handbrake.fr/downloads.php
Настройки приведены на скриншотах: