Отладочная плата EV-L138/AM1808-Lite

Вступление


Плата EV-L138/AM1808-Lite может комплектоваться процессором OMAP-L138 (два ядра ARM926 + DSP C674x) или процессором AM1808 (только ядро ARM926). Соответственно примеры использующие DSP ядро на плате с процессором AM1808 работать не будут.
На плате опционально может быть установлена микросхема SPI Flash памяти MX25L6406.
Основные отличия ревизии платы v2.1 от v2.0:

Сборка u-boot.


Правим при необходимости 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)

Обертка u-boot с помощью утилиты AISgen



Запускаем 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'
Восстановление ядра и файловой системы в NAND Flash



Записываем 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

Использование платы дисплея EV-ATM5HD-PLUG совместно с EV-L138/AM1808-Lite



Подключить дисплей с помощью 30-жильного кабеля к плате.

И к дисплею.

Поскольку микросхема контроллера экрана TPS65070 имеет собственный контроллер тачскрина,
необходимо с помощью перемычек отключить микросхему TSC2046 (ADS7846) установленную на дисплее.
На дисплеи установить перемычки J4, J5, J8, J9, J10 в положении 1-2. Снять перемычки J2, J3, J6, J7.

Перед использованием панели надо откалибровать тачскрин, нажав последовательно на 5 точек в углах и центре экрана

ts_calibrate



Затем можно запустить тест и порисовать:

ts_test


Подключение HDD накопителя на жестких дисках



Подключаем 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 к плате


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 к плате EV-AM1808/L138 в среде Code Composer Studio 4.2.4


Подключаем эмулятор 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


Строка запуска gstreamer для проигрывания 720p файлов


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
I2C шина


Детектирование устройство на шине

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
Далее идет информация для виртуальной машины с dvsdk_omapl138-evm_04_03_00_06


Загрузчик 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 (потребуется пароль администратора)

Запуск демонстрационной оболочки Matrix


/etc/init.d/matrix-gui-e start


Генерация тестовой таблицы


gst-launch videotestsrc ! video/x-raw-rgb  ! fbdevsink


Генерация тестовой таблицы на весь экран (800*480)


gst-launch videotestsrc ! video/x-raw-rgb, framerate=25/1, width=8
00, height=480 ! fbdevsink


Немного экспериментов с Web камерой. Использовалась Logitech C110, подключенная в разъем USB Full Speed, в системе /dev/video2

Захватываем видео с WEB камеры (UVC стандарта)


gst-launch v4l2src device=/dev/video2 ! ffmpegcolorspace ! fbdevsink


Захватываем видео с WEB камеры (UVC стандарта) с нужным нам разрешением


gst-launch v4l2src device=/dev/video2 ! video/x-raw-yuv, width=320,height=240 ! ffmpegcolorspace ! fbdevsink


Захватываем видео с WEB камеры (UVC стандарта) и транслируем в сеть


gst-launch v4l2src device=/dev/video2 ! ffmpegcolorspace !  jpegenc ! tcpclientsink  protocol=gdp host=192.168.0.101


Захватываем видео с WEB камеры (UVC стандарта) с нужным нам разрешением и транслируем в сеть


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


Захватываем видео с WEB камеры (UVC стандарта) сжимаем в mp4 и пишем в файл на USB Flash Drive


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 
Воспроизведение ролика mp4 720p


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
Настройки приведены на скриншотах: