**Отладочная плата EV-L138/AM1808-Lite** \\
* [[http://otladka.com.ua/doc/evam1808/usermanual_ ev-l138_am1808_rev2.pdf|Руководство пользователя(Обновлено 23/11/2012)]]
* {{:evam1808_rev2_sch.pdf|Принципиальная схема (Обновлено 23/11/2012)}}
* [[https://docs.google.com/file/d/0B_FS6J7Oi9HaR1hnOFVad0JZdUU/edit|Архив для восстановления u-boot, ядра и файловой системы + утилита для программирования NAND/SPI Flash (Для плат с 128 MB ОЗУ обновлено 31/01/2013]]
* [[https://docs.google.com/file/d/0B_FS6J7Oi9HabFZpMWFSMHNZbXM/edit|Архив для восстановления u-boot, ядра и файловой системы + утилита для программирования NAND/SPI Flash (Для плат с 256 MB ОЗУ обновлено 31/01/2013]]
* [[http://otladka.com.ua/doc/evam1808/virtual_evam1808.rar|Образ виртуальной машины VirtualBox для сборки u-boot, ядра и файловой системы ]] \\
* [[https://docs.google.com/file/d/0B_FS6J7Oi9HaYmtIaHpZYkgxdkk/edit|Образ виртуальной машины с установленным dvsdk_omapl138-evm_04_03_00_06 (Обновлено 31/01/2013)]] \\
* [[http://otladka.com.ua/doc/evam1808/omapl138_software_developers_guide.pdf|Документ OMAPL138 Software Developers Guide (англ.)]]\\
{{:evam1808_components.png?300|}}{{:evam1808_connectors.png?300|}}
Вступление \\
Плата EV-L138/AM1808-Lite может комплектоваться процессором OMAP-L138 (два ядра ARM926 + DSP C674x) или процессором AM1808 (только ядро ARM926). Соответственно примеры использующие DSP ядро
на плате с процессором AM1808 работать не будут.\\
На плате опционально может быть установлена микросхема SPI Flash памяти MX25L6406.\\
Основные отличия ревизии платы v2.1 от v2.0:\\
* Использован Push-Pull держатель для microSD карты;\\
* Добавлена задержка в цепь CLK mmcsd1;
* Предусмотрена установка микросхемы часов реального времени PCF8563 вместо DS1338;
Сборка 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 \\
{{:evam1808_aisgen.png?300|}} \\
Запускаем **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
\\
{{:evam1808_sfhexe.png?300|}} \\
Где COM1 - номер COM порта компьютера, к которому подключена плата \\
u-boot.bin - имя "обернутого" файла u-boot \\
Нажимаем кнопку сброса на плате, начнется процесс передачи и записи файла. \\
После окончания программирования отключаем питание, устанавливаем BOOT перемычки в режим загрузки с NAND Flash, подаем питание \\
В консоли можно увидеть загрузку u-boot. \\
{{:evam1808_uboot_console.png?300|}} \\
Прерываем загрузку 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 \\
{{:evam1808_safe.png?300|}}\\
Записываем u-boot, как описано выше. \\
Записываем на USB Flash Drive папку Owlboard из архива safe_evam1808.zip\\
В папке Owlboard присутствуют файлы:\\
* u-boot.bin - загрузчик\\
* uImage - собранное ядро\\
* rootfs.tar.gz - файловая система\\
В папке 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 \\
{{:evam1808_lcd.png?300|}} \\
Подключить дисплей с помощью 30-жильного кабеля к плате. \\
{{:evatm5hdplug.png?300|}} \\
И к дисплею.\\
{{:evatm5hdplug_jumpers.png?300|}} \\
Поскольку микросхема контроллера экрана TPS65070 имеет собственный контроллер тачскрина, \\
необходимо с помощью перемычек отключить микросхему TSC2046 (ADS7846) установленную на дисплее. \\
На дисплеи установить перемычки J4, J5, J8, J9, J10 в положении 1-2. Снять перемычки J2, J3, J6, J7. \\
{{:evatm5hdplug_calibrate.png?300|}} \\
Перед использованием панели надо откалибровать тачскрин, нажав последовательно на 5 точек в углах и центре экрана \\
ts_calibrate
\\
{{:evatm5hdplug_test.png?300|}} \\
Затем можно запустить тест и порисовать: \\
ts_test
\\
Подключение HDD накопителя на жестких дисках \\
{{:evam1808_hdd.png?300|}}\\
Подключаем 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\\
{{:jlinkjtag.png?300|}}\\
Слева сигналы разъема 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\\
{{:jlink1.png?300|}}\\
Видно, что цепочка найдена, но процессор не опознан.\\
Копируем скрипт OMAP-L138.JlinkScript из папки \ProgramFiles\SEGGER\JLinkARM_xxx\Samples\JLink\Scripts\OMAP-L138.JLinkScript\\
в папку с утилитой Jlink.exe (ProgrammFiles/Segger/JLinkARM_xxx/) и переименовываем этот скрипт в default.c\\
Снова запускаем JLink.exe и видим, что процессор найден\\
{{:jlink2.png?300|}}\\
Для отладки в среде 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 кабель к эмулятору и подаем питание на плату\\
{{:xds100_evam1808.png?300|}}\\
Запускаем Code Composer Studio (CCS)\\
{{:evam1808_ccs1.png?300|}}\\
Target - New Target Configuration\\
{{:evam1808_ccs2.png?300|}}\\
Придумываем имя для конфигурации\\
{{:evam1808_ccs3.png?300|}}\\
В выпадающем списке Connection выбираем эмулятор XDS100v2, в Device устанавливаем галочку на OMAPL138, нажимаем кнопку Save\\
{{:evam1808_ccs4.png?300|}}\\
Target - Launch TI Debugger\\
{{:evam1808_ccs5.png?300|}}\\
Нажимаем правой кнопкой мыши на 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
\\
Перекодировать ролики удобно с помощью утилиты [[handbrake]][[http://handbrake.fr/downloads.php]] \\
Настройки приведены на скриншотах: \\
{{:handbrake1.png?300|}}
{{:handbrake2.png?300|}} \\
{{:handbrake3.png?300|}}
{{:handbrake4.png?300|}} \\
{{:handbrake5.png?300|}} \\