**Отладочная плата 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|}} \\