Средства отладки

Курс сегодня

1 $ = 27.50 грн

Skype: My status

EV-iMX6UL Виртуальная машина

Данный краткий обзор посвящен материнским платам EV-iMX6UL-SODIMM-MB и EV-iMX6UL-NANO-MBX, предназначенным для быстрого старта и оценки работы модулей формата SODIMM200 (EV-iMX6UL-SODIMM) и формата NANO (EV-iMX6YL-NANO).

1. Подсистема питания

Для работы с платой EV-iMX6UL-SODIMM-MB требуется источник питания с напряжением 5.2-5.5В, ток до 2А.

Для работы с платой EV-iMX6Ul-NANO-MBX требуется источник питания с напряжением 9-24В, ток 1А.

 

2. Источник загрузки модуля

На плате EV-iMX6Ul-SODIMM-MB предусмотрен дип переключатель с помощью которого можно выбрать любой из источников загрузки (USB - режим MFGTool, NAND, SPI, eMMC, SDcard). Модуль EV-iMX6UL-SODIMM использует для хранения

загрузчика (u-boot), операционной системы Linux (zImage + dtb) и файловой системы микросхему памяти eMMC объемом 2-32 ГБ, которая подключена к процессору с помощью интерфейса USDHC2. Поэтоому для корректной работы модуля, необходимо установить

с помощью дип переключателя режим загрузки с eMMC2 (1010110).

На плате EV-iMX6Ul-NANO-MBX переключатель не предусмотрен. Запрограммированный модуль EV-iMX6UL-NANO использует в качестве источника загрузки память eMMC объемом 2-32 ГБ, которая подключена к процессору с помощью интерфейса USDHC2.

Оба модуля EV-iMX6UL-SODIMM и EV-iMX6UL-NANO поставляются с незапрограммированными eFuse! (Путем программирования eFuse возможно установить любой источник  загрузки). Незапрограммированный модуль автоматически переходит в режим загрузки USB (MFGTool) в случае, если микросхема eMMC не содержит загрузчик или он поврежден.

 

3. Отладочный интерфейс DUART.

Используется в качестве консоли. Подключен к выводам UART1 процессора. На платах EV-iMX6UL-SODIMM-MB и EV-iMX6UL-NANO-MBX предусмотрен 4-х контактный разъем (SM04B-SRSS-TB(LF)(SN))  для подключения переходника UART-USB EV-FT230. Возможно использования любых других микросхем интерфейса RS-232 или переходников USB-UART с логическими уровнями сигнала 3.3В.

Назначение контактов разъема установленного на платах -

1 - GND  - GND

2 - RXD  - TXD

3 - TXD  - RXD

4 - VCC  - VCC

 

4. Включение модуля

Необходима любая терминальная программа, например PuTTY для просмотра выводимых сообщений. Настройки терминальной программы - скорость 115200 контроль передачи и четности - отсутствует.

Модули поставляются с запрограммированной микросхемой памяти eMMC - запрограммирован загрузчик u-boot, ядро OS Linux и файловая система. Достаточно установить модуль в материнскую плату, подключить консоль (RS-232, USB) и подать питание.

В терминальной программе будет виден старт загрузчика u-boot. В загрузчике установлена задержка в 3 секунды,по истечении которых из микросхемы eMMC будет прочитан образ ядра (zImage и dtb файл (imx6ul-14x14-sodimm.dtb или imx6ul-14x14-nano.dtb))

после чего будет выполнена загрузка ядра Linux и монтирование файловой системы rootfs.

Строка аргументов  загрузчика

 

u-boot>setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw';

 

5. Загрузка USB. Для упрощения программирования модуля предусмотрен режим загрузки по интерфейсу USB. Со стороны компьютера модуль виден как HID устройство. С помощью специальной программы MFGTool.exe возможна загрзка и запись в микросхему

eMMC, NAND, SPI Flash. Для перехода в режим загрузки по интерфейсу USB необходимо выставить соответсвующий режим с помощью дип переключателя или стереть загрузочный сектор микросхемы eMMC.

 

Сделать это если при старте платы нажатием любой кнопки клавиатуры прервать чтение и загрузку ядра и выполнить команду

 

u-boot>mmc erase 0 100

 

После сброса платы или следующей подачи питания модуль перейдет в режим загрузки по интерфейсу USB.

 

Также существует утилита sb_loader.exe, с помощью которой можно загрузить код по USB и запустить на выполнение. Например, команда

 

PC://sb_loader.exe -f u-boot.imx

 

загрузит файл u-boot.imx в память модуля и запустить на выполнение. В терминальной программе можно увидеть лог запуска загрузчика u-boot.imx. Это удобно на стадии отладки загрузчика. Нет необходимости каждый раз его записывать в микросхему

eMMC для проверки. Достаточно загрузить по USB и он готов к проверке.

 

Загрузка ядра и dtb файла. Обычно файлы zImage и imx6ul-14x14-sodimm.dtb или imx6ul-14x14-nano.dtb записаны в микросхеме eMMC (партиция mmcblk1p1). Загрузчик u-boot вычитывает их и запускает на выполнение.

При отладке ядра или dtb файла неудобно каждый раз стирать и записывать микросхему eMMC. Имеется возможность загрзить ядро другими способами:

 

1. Загрузка по сети:

В сети должен присутствовать tftp сервер, на который необходимо скопировать файлы zImage и imx6ul-14x14-sodimm.dtb или imx6ul-14x14-nano.dtb

в переменных окружения u-boot должны быть указаны ip адрес платы, mac адрес платы, ip адрес gateway и ip адрес tftp сервера. Для сети 192.168.1.x переменные могут выглядеть так:

 

u-boot>setenv ipaddr 192.168.1.119

u-boot>setenv ethaddr 12:8B:1C:F4:98:1A

u-boot>setenv gateip 192.168.1.1

u-boot>setenv serverip 192.168.1.110

u-boot>saveenv

 

Загружаем файлы по сети

 

u-boot>tftpboot ${loadaddr} zImage

u-boot>tftpboot ${fdt_addr} imx6ul-14x14-sodimm.dtb

u-boot>bootz ${loadaddr} - ${fdt_addr}

 

2. Загрузка с USB Flash:

Создадим на USB Flash Drive папку mx6ul. В нее скопируем файлы zImage и imx6ul-14x14-sodimm.dtb или imx6ul-14x14-nano.dtb. Вставляем USB Flash Drive в плату, подаем питание и в u-boot выполняем следующие команды:

 

u-boot>setenv loadaddr 0x81000000;

u-boot>usb start;

u-boot>fatload usb 0 $loadaddr /mx6ul/zImage;

u-boot>fatload usb 0 $fdt_addr /mx6ul/imx6ul-14x14-sodimm.dtb;

u-boot>bootz ${loadaddr} - ${fdt_addr};

 

Примечание! В случае, если используется ядро с initramfs (ядро со вxстроенной файловой системой) большого размера возможно потребуется изменение loadaddr и fdt_addr.

 

Запись загрузчика u-boot, ядра и файловой системы в микросхему eMMC.

Для платы EV-iMX6Ul-SODIMM-MB необходимо установить дип переключатель в режим MFGTool, подключить кабель USB-A в порт USB0 материнской платы и к компьютеру и подать питание. Для платы EV-iMX6UL-NANO-MBX, которая не имеет дип переключателя потребуется предварительное

стирание загрузочного сектора микросхемы eMMC в u-boot командой:

 

u-boot>mmc erase 0 100

 

и отключить-включить питание.

На компьютере запускаем скрипт ev-imx6ul-sodimm-buildroot.vbs. Данный скрипт отформатирует микросхему eMMC и запишет в нее файлы:

1. u-boot.imx (начальный загрузчик)

2. zImage     (ядро операционной системы)

3. imx6ul-14x14-sodimm.dtb (файл описания периферии)

4. rootfs_buildroot.tar.bz2 (файловая система)

 

Файловая система собранная с помощью buildroot отличается своей компактностью (разумеется при разумном конфигурировании)

Для изучения возможностей, в той же папке есть еще скрипт ev-imx6ul-sodimm-debian.vbs, который запишет файловую систему Debian (rootfs_debian.tar.bz2) или скрипт ev-imx6ul-sodimm-yocto.vbs (rootfs_yocto.tar.bz2) - файловую стистему собранную с помощью Yocto.

Файловые системы Debian и Yocto приведены только для ознакомления. В дальнейшем будет описываться сборка файловой системы с помощью buildroot.

После того, как вы соберете собственный загрузчик, ядро и файловую систему, вам будет достаточно заменить файлы u-boot.imx, zImage, imx6ul-14x14-sodimm.dtb (imx6ul-14x14-nano.dtb) в папке mfgtools\Profiles\Linux\OS Firmware\files на собственные.

 

Виртуальная машина.

Для сборки загрузчика, ядра операционной системы и файловой системы предлагается настроенная и сконфигурированная виртуальная машина VMware. Образ виртуальной машины можно загрузить по данной ссылке. (ссылка)

Для входа в виртуальную машину используйте

Login: user

Password: 123456

user@ubuntu: cd /home/user/Projects/EV-iMX6UL/buildroot-2016-11.1

user@ubuntu: make menuconfig

 

Меню настроек и выбора собираемых пакетов. Отметим наиболее важные пункты.

1. Kernel ->  Device Tree Source file names

 

Здесь необходимо указать имя dts файла, который будет собираться.

2. Filesystem images ->  tar the root filesystem -> Compression method (bzip2)

 

Также можно установить галочку на cpio the root filesystem (for use an an initial RAM filesystem)

 

Это позволит собрать ядро со встроенной файловой системой.

В меню Target packages можно выбрать пакеты для сборки, которые вам необходимы. Выходим , нажав на Exit и

 

выбрав Yes подтверждаем внесенные изменения.

Сконфигурируем ядро

user@ubuntu: ~/Projects/EV-iMX6UL/buildroot-2016-11.1$ make linux-menuconfig

Здесь можно выбрать необходимые драйвера, которые необходимо включить в ядро Linux. Выходим нажав Exit и нажав Yes подтверждаем внесенные изменения.

Сборка.

Для сборки достаточно набрать make:

user@ubuntu: ~/Projects/EV-iMX6UL/buildroot-2016-11.1$ make

При удачном завершении процесса сборки в папке /build/output/images/ вы найдете следующие файлы:

  • u-boot.imx - собранный загрузчик u-boot
  • zImage - собранное ядро Linux
  • imx6ul-14x14-sodimm.dtb - файл описания периферии
  • rootfs.tar.bz2 - собранная и запакованная файловая система.

Эти файлы можно записать в микросхему eMMC используя утилиту MFGTool.exe (не забыв переименовать rootfs.tar.bz2 в rootfs_buildroot.tar.bz2 )

Сборка ядра с initramfs

user@ubuntu: ~/Projects/EV-iMX6UL/buildroot-2016-11.1$ make linux-menuconfig

Устанавливаем галочку

General Setup ->  Initial RAM filesystem and RAM disk (initramfs/initrd)

 

и указываем путь к файлу rootfs.cpio , в нашем случае это /home/user/Projects/EV-iMX6UL/buildroot-2016-11.1/output/images/rootfs.cpio

Exit->Yes.

Снова запускаем процесс сборки

user@ubuntu: ~/Projects/EV-iMX6UL/buildroot-2016-11.1$ make

После завершения сборки, можно заметить, что файл zImage заметно увеличился в размерах. В него теперь включена файловая система.

Исходные файлы.

Для загрузчика u-boot это два файла

Файл конфигурации

/home/user/Projects/EV-iMX6UL/buildroot-2016.11.1/output/build/uboot-rel_imx_4.1.15_2.0.0_ga/include/configs/mx6ul_14x14_evk.h

Борд файл платы

/home/user/Projects/EV-iMX6UL/buildroot-2016.11.1/output/build/uboot-rel_imx_4.1.15_2.0.0_ga/board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c

Для ядра Linux

Борд файл платы

/home/user/Projects/EV-iMX6UL/buildroot-2016.11.1/output/build/linux-rel_imx_4.1.15_2.0.0_ga/arch/arm/mach-imx/mach-imx6ul.c

Файл описания периферии для модуля EV-iMX6UL-SODIMM

/home/user/Projects/EV-iMX6UL/buildroot-2016.11.1/output/build/linux-rel_imx_4.1.15_2.0.0_ga/arch/arm/boot/dts/imx6ul-14x14-sodimm.dts

Файл описания периферии для модуля EV-iMX6UL-NANO

/home/user/Projects/EV-iMX6UL/buildroot-2016.11.1/output/build/linux-rel_imx_4.1.15_2.0.0_ga/arch/arm/boot/dts/imx6ul-14x14-nano.dts

Важное замечание!

Если вы изменяете данные файлы, то после окончанчания редактирования удалите файл

.stamp_built в папке /home/user/Projects/EV-iMX6UL/buildroot-2016.11.1/output/build/uboot-rel_imx_4.1.15_2.0.0_ga/  или /home/user/Projects/EV-iMX6UL/buildroot-2016.11.1/output/build/linux-rel_imx_4.1.15_2.0.0_ga в зависимости от того где вы производите изменения. Дело в том, что таким образом (создав файл .stamp_built) buildroot помечает удачно собранные пакеты и при следующей пересборке, обнаружив этот файл в папке, он обходит в сборке данный пакет.

Описание платы EV-iMX6UL-SODIMM-MB.

На плате расположены

  • разъем SODIMM200 для установки модуля EV-iMX6UL-SODIMM
  • Разъем микро SD карты
  • Разъем питания (5В/2А)
  • FPC разъем для подключения дисплея
  • Аудиокодек WM8960 с разъемами Line Out/Mic In/SPK_Out. Также на плате имеется встроенный электретный микрофон
  • Два Ethernet разъемами со встроенными трансформаторами. Один из разъемов подключен к микросхеме физического уровня PHY установленной на модуле EV-iMX6UL-SODIMM. Второй разъем подключен к микросхеме физического уровня Ethernet PHY расположенной на самой материнской плате EV-iMX6UL-SODIMM-MB
  • Два разъема USB 2.0 HS. Верхний разъем USB0, он же используется при программировании платы с помощью MFGTool. Нижний разъем -USB1.
  • Микросхема трансивера SN65HVD12 и разъем интерфейса RS-485 (UART3). В платах EV-iMX6UL-SODIMM-MB в ерсии 1.3 и ниже имеется ошибка. Для управления направлением прием/передача используется сигнал UART3_RTS, вместо сигнала UART3_CTS. Для исправления данной ошибки необходимо отрезать дорожку с сигналом UART3_RTS подключенную к выводам 2 и 3 микросхемы трансивера U6 (SN65HVD12) и подключить к данным выводам сигнал UART3_CTS (вывод 34 разъема модуля M1).
  • Микросхема трансивера SN65HVD232 и разъем интерфейса CAN (CAN2)
  • DIP переключатель для выбора источника загрузки модуля
  • Держатель батареи CR1220 для питания RTC встроенного в процессор
  • 20-и контактный разъем JTAG
  • Штыревые разъемы с шагом 2.54 мм, на которые выведены сигналы модуля.

 

Описание платы EV-iMX6UL-SODIMM-MB.

Малоформатный модуль EV-iMX6UL-NANO прежде всего нацелен на использованиии в области удаленного мониторинга и управления.  Материнская плата EV-iMX6UL-NANO-MBX  призвана максимально раскрыть богатый потенциал модуля. На печатной плате 8-ми угольной формы, с размерами 120*120 мм расположены следующие компоненты:

  • 52-х контактный разъем mini PCI-e для установки модуля EV-iMX6UL-NANO
  • Подсистема питания, построенная на микросхеме TPS54331, позволяющая запитать плату от источника питания с напряжением 9-24В.
  • Дополнительные стабилизаторы на 3.3В для питания TFT LCD матриц с интерфейсом LVDS, напряжение 12В для работы подсветки дисплея и 4.0В для питания GSM модема SIM800C
  • USB Hub USB2514 на 4 нисходящих порта. К одному из нисходящих портов подключен модуль WiFi/Bluetooth на баз микросхемы RTL8273BU. Три остальных порта подключены к разъемам USB-A. Микросхема USB2514 управляет ключами питания портов USB и следит за перегрузкой по току.
  • Микросхема трансивера RS-485 (65HVD12) и разъем (разрывной клеммный соединитель с шагом 3,81 мм).
  • Микросхема трансивера CAN (65HVD232) и разъем (разрывной клеммный соединитель с шагом 3,81 мм).
  • Разъем micro USB, подключенный к порту USB0 модуля, позволяет программировать модуль с помощью утилиты MFGTool и работать в режиме Host/Device.
  • GSM модуль SIM800C компании SIMCOM с держателем SIM карт стандартного размера. Два светодиода отображает режим работы и статус модема.
  • 2 Реле HF49F с разъемами (разрывной клеммный соединитель с шагом 3,81 мм).  Два светодиода индицируют состояние реле.
  • Разъем для подключения малогабаритного OLED дисплея с разрешением 128*32 с контроллером SSD1306. Дисплей подключен к модулю интерфейсом I2C1 модуля.
  • 4-х контактный разъем DUART для использовании в качестве консоли. Уровни сигнала 3.3В. Рекомендуется использовать переходник EV-FT230.
  • WiFi/Bluetooth модуль на базе микросхемы RTL8273BU.
  • 40 контактный штыревой разъем с шагом 2,54 мм, на который выведены все сигналы модуля, за исключением USB/Ethernet.
  • Дополнительный 24 контактный разъем с шагом 2,54 мм. В данный разъем могут быть установлены ZigBee модули на базе микросхемы TI CC2530 и модуль трансивера на базе микросхемы Nordic nRF24L01
  • Кнопка Reset для аппаратного сброса модуля.
  • На обратной стороне платы расположен держатель литиевой батареи CR1220 для работы встроенного в процессор RTC и держатель SD карты.

 

Драйвер WiFi модуля RTL8273BU.

В Staging Drivers находится дравейра WiFi модуля.

Настройка WiFi соединения

Для подключения к открытой сети Asus-C064

ifconfig wlan0 up

iwlist wlan0 scan

iwconfig wlan0 essid ASUS-C064

dhcpcd wlan0

ping 192.168.1.1

Для подключения к сети с WPA шифрованием Asus-C075 с паролем pass123456

ifconfig wlan0 up

iwlist wlan0 scan

wpa_passphrase Asus-C075 pass123456 > /etc/wpa_supplicant.conf

wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf

Управление модемом SIM800C.

Для включения / выключения модема используется сигнал Powerkey (SAI2_MCLK/GPIO1_IO11). Данный вывод объявлен как GPIO в u-boot и установлен уровень логического 0. Это сделано для того, чтобы при подачи питания на плату модем не включался. В файле imx6ul-14x14-nano.dts данный вывод также объявлен как GPIO.

В /etc/init.d/ создан файл S31modem

echo 11 > /sys/class/gpio/export

echo out > /sys/class/gpio/gpio11/direction

echo 0 > /sys/class/gpio/gpio11/value

При старте системы он настраивает GPIO1_IO11 на выход и устанавливает 0 на выходе.

Скрипт modem_on включает модем

 

Скрипт modem_off выключает модем

 

Скрипт connect_utel устанавливает ppp соединение

 

Управление реле

Сигнал I2C2_SCL (GPIO4_IO20) используется для управление Relay1, сигнал I2C2_SDA(GPIO4_IO19) для управления Relay2.

Для того чтобы включить реле необходимо записать 1 в соответствующий GPIO

echo 1 > /sys/class/gpio/gpio116/value  - включить Relay1

echo 1 > /sys/class/gpio/gpio115/value  - включить Relay2

Чтобы отключить реле необходимо записать 0 в соответствующий GPIO

echo 0 > /sys/class/gpio/gpio116/value  - выключить Relay1

echo 0 > /sys/class/gpio/gpio115/value  - выключить Relay2

Примечание: номер порта GPIO считается по формуле ((GPIO-1)*32) + IO. Пример,

GPIO4_IO20 = ((4-1)*32)+20 = 116

Использование TFT LCD с LVDS интерфейсом.

На модуле EV-iMX6UL-NANO может быть установлен LVDS передатчик 74LVDS93 включенный по схеме с 18-и битным цветом, поскольку большинство матриц небольшого размера 7-11" имеют глубину цвета 18 бит (262144 цветов)

Настройки LCD контроллера находятся в dts файле. Например, для дисплея LTN101NT06 (http://www.laptopremont.com/manuals/LTN101NT06-001.pdf) с диагональю 10,1" необходимо прописать следующте параметры:

ltn101 {

clock-frequency = <54200000>;

hactive = <1024>;

vactive = <600>;

hfront-porch = <24>;

hback-porch = <160>;

hsync-len = <136>;

vback-porch = <61>;

vfront-porch = <3>;

vsync-len = <6>;

 

hsync-active = <0>;

vsync-active = <0>;

de-active = <1>;

pixelclk-active = <0>;

};

На материнской плате находится стабилизатор 3,3В/2А для питания дисплея.  Матрица LTN101NT06  имеет максимальное потребление 1.5А. Для питания подсветки на материнской плате предусмотрен повышающий преобразователь AP3012 с выходным напряжением 14В.

OLED дисплей 128*32

На плате установлен OLED дисплей с разрешением 128*32 точки с управляющим контроллером SSD1306.

Ввиду небольшого разрешения, дисплей управляется по I2C шине (I2C1 шина процессора) .  Дисплей используется для отображения сетевых настроек (IP адрес) модуля. В виртуальной машине имеется папке C example содержащая пример работы с дисплеем. Для сборки данной программы достаточно запустить скрипт make_ssd. Собранный исполняемый файл test_ssd1306 можно скопировать в папку /root/ файловой системы и запускать:

./test_ssd1306

 

 

 

 

 

 

 

 

 

 

Последние поступления