====== Одноплатный компьютер ПМВент ====== ====== Результаты тестирования ====== Обозначения в таблице:\\ * {{ru:led-green.gif}} - проверено и работает как ожидается; * {{ru:led-grey.gif}} - не проверено вовсе; * {{ru:led-red.gif}} - проверено и совсем не работает; ^ Сеть ^ USB HOST ^ USB OTG ^ Реле ^ Ц.ВХ. ^ DIP-switch ^ ЦАП ^ АЦП ^ 1-wire ^ CAN ^ RS-485 ^ Wifi ^ | {{ru:led-green.gif}} | {{ru:led-green.gif}} | {{ru:led-green.gif}} | {{ru:led-green.gif}} | {{ru:led-green.gif}} | {{ru:led-green.gif}} | {{ru:led-green.gif}} | {{ru:led-green.gif}} | {{ru:led-green.gif}} | {{ru:led-grey.gif}} | {{ru:led-green.gif}} | {{ru:led-green.gif}} | ====== Работа с одноплатным компьютером ПМ-ВЕНТ ====== Для питания одноплатного компьютера требуется переменное напряжение 24В. Питание подают на разъем X1. Одноплатный компьютер ПМ-ВЕНТ имеет консольный интерфейс пользователя, т.е. всю системную информацию устройство выводит в текстовом режиме на терминальное устройство, подключенное к разъему X30 (Mini-USB "Тип B"). Ввод команд от пользователя также осуществляется через терминальное устройство. Параметры консольного порта:\\ Скорость: 115200 бод в секунду\\ Длина слова: 8 бит\\ Стоповый бит: 1 бит\\ Контроль четности: нет\\ Аппаратное управление потоком: нет\\ При первом подключении консоли Windows обнаружит новое устройство, для которого необходимо установить драйвера. На плате установлена микросхема FT232RL, поэтому драйвера скачивают отсюда: http://www.ftdichip.com/Drivers/VCP.htm. Для работы с компьютером ПМ-ВЕНТ в Linux не требуется дополнительных действий, т.к. в большинстве дистибутивов Linux поддержка FTDI чипов уже включена и загрузка специального модуля выполняется автоматически. * Windows: В программе HyperTerminal необходимо выставить скорость 115200, 8 бит, без контроля четности, стоповый бит 1, без управления потоком. * Linux: В программе minicom выбирают устройство (обычно это) »/dev/ttyUSB0» и устанавливают те же настройки, что и для HyperTerminal. ===== Назначение сигналов модуля SomIQ-AM35 ===== Разъем X2 ^ № контакта ^ Назначение ^ Примечания | | 1 | VMMC | питание SD | | 2 | USB HOST DN | | | 3 | MMC1_CD (ETK_D15/GPIO_29) | Card Detect | | 4 | USB HOST DP | | | - | | | | 34 | MMC1 CLK | | | 35 | - | | | 36 | MMC1 CMD | | | 37 | USB0 VBUS | USB OTG | | 38 | MMC1 DATA0 | | | 39 | USB0 DP | USB OTG | | 40 | MMC1 DATA2 | | | 41 | USB0 DN | USB OTG | | 42 | MMC1 DATA1 | | | 43 | - | | | 44 | MMC1 DATA3 | | | 45 | USB0 ID | USB OTG | | 46 | GPIO 127 (MMC1_DAT5) | 6 DIP (1) | | 47 | MMC1 WP (MMC1_DAT4/GPIO_126) | SD Write Protect | | 48 | GPIO 129 (MMC1_DAT7) | 6 DIP (2) | | 49 | - | | | 50 | GPIO 159 (MCBSP1_DR) | 6 DIP (3) | | 51 | - | | | 52 | GPIO 158 (MCBSP1_DX) | 6 DIP (4) | | 53 | - | | | 54 | GPIO 157 (MCBSP1_FSR) | 6 DIP (5) | | 55 | - | | | 56 | GPIO 161 (MCBSP1_FSX) | 6 DIP (6) | | - | - | | | 63 | GPIO 119 (MCBSP2_DX) | Digital in 4 | | 64 | - | | | 65 | GPIO 116 (MCBSP2_FSX) | Digital in 1 | | 66 | - | | | 67 | GPIO 117 (MCBSP2_CLKX) | Digital in 2 | | 68 | - | | | 69 | GPIO 118 (MCBSP2_DR) | Digital in 3 | | 70 | GPIO 155 (MCBSP4_FSX) | Relay 9 | | - | - | | | 73 | GPIO 97 (CCDC_VD) | Digital in 6 | | 74 | GND | | | 75 | GPIO 96 (CCDC_HD) | Digital in 5 | | 76 | GPIO 98 (CCDC_WEN) | Digital in 7 | | - | - | | | 85 | GPIO 105 (CCDC_D6) | Relay 7 | | 86 | GPIO 106 (CCDC_D7) | Relay 8 | | 87 | GPIO 103 (CCDC_D4) | Relay 5 | | 88 | GPIO 104 (CCDC_D5) | Relay 6 | | 89 | GPIO 101 (CCDC_D2) | Relay 3 | | 90 | GPIO 102 (CCDC_D3) | Relay 4 | | 91 | GPIO 99 (CCDC_D0) | Relay 1 | | 92 | GPIO 100 (CCDC_D1) | Relay 2 | Разъем X3 ^ № контакта ^ Назначение ^ Примечания | | - | - | | | 9 | GPIO 136 (MMC2_DATA4) | WLAN EN (Tiwi-R2) | | 10 | GPIO 137 (MMC2_DATA5) | WLAN IRQ (Tiwi-R2) | | 11 | SDIO_D2 (MMC2_DATA2) | SDIO_D2 (Tiwi-R2) | | 12 | SDIO_D3 (MMC2_DATA3) | SDIO_D3 (Tiwi-R2) | | 13 | SDIO_D0 (MMC2_DATA0) | SDIO_D0 (Tiwi-R2) | | 14 | SDIO_D1 (MMC2_DATA1) | SDIO_D1 (Tiwi-R2) | | 15 | SDIO_CLK (MMC2_CLK) | SDIO_CLK (Tiwi-R2) | | 16 | SDIO_CMD (MMC2_CMD) | SDIO_CMD (Tiwi-R2) | | - | - | | | 23 | BOOT[5] | Не используется пока | | - | - | | | 36 | RESET | CPU RESET | | - | - | | | 41 | CAN_TX | | | 42 | - | | | 43 | CAN_RX | | | - | - | | | 46 | UART3_RX | Консоль | | 47 | UART3_TX | Консоль | | - | - | | | 94 | I2C3_SDA | I2C данные | | 95 | GPIO 119 (MCBSP3_DX) | ADC Busy (Pulled-UP) | | 96 | I2C3_SCL | I2C clock | | 97 | GPIO 116 (MCBSP3_FSX) | ADC Start conversion (#low) | ===== Сборка ПО ===== Всё ПО скомпилировано в дистрибутиве Linux Ubuntu 10.04. Компилятор: [[https://sourcery.mentor.com/sgpp/lite/arm/portal/package6488/public/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2|CodeSourcery 2010q1]] Как установить компилятор описано здесь: [[arm-gcc]] ==== Подготовка SD карты ==== Подойдет любая SD карта ёмкостью около 2ГБ (зависит от размера файловой системы). Скачиваем скрипт для форматирования карты: [[http://www.mentorel.com/tmp/mkcard.txt]] Выполняем его на неподмонтированной карте (например, /dev/sdc): sudo LANG=c ./mkcard.txt /dev/sdc Следите за возможными сообщениями об ошибках и, если всё ОК, то получите два раздела: * FAT32 (сюда записывают MLO, u-boot.bin, uImage) * Ext3 (здесь находится файловая система) ==== x-loader ==== 1) скачиваем исходники xloader для SomIQ-AM35 git clone git://github.com/mentorel/xload-am35.git 2) компилируем Сначала необходимо прописать путь к компилятору export PATH=/opt/arm-2010q1/bin:$PATH make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm distclean make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm am3517somiq_config make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm 3) Получаем файл x-load.bin, который преобразуем в нужный формат: Утилиту signGP скачивают отсюда: [[http://code.google.com/p/beagleboard/downloads/list]] signGP x-load.bin mv x-load.bin.ift MLO 4) Полученный файл MLO необходимо записать на __свеже-отформатированную__ партицию FAT32 карты SD. ==== u-boot ==== //Примечание: данную версию u-boot возможно скомпилировать компилятором версии Mentor Graphics 2010q1 и выше. Подробности здесь: [[arm-gcc]]// 1) скачиваем исходники u-boot для SomIQ-AM35 wget http://mentorel.com/tmp/uboot-am35somiq.tgz 2) компилируем make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm distclean make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm am3517somiq_config make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm 3) Полученный файл u-boot.bin записываем на партицию FAT32 карты SD ==== ядро Linux ==== Данное ядро версии 2.6.37 было портировано с платформы AM3517EVM. Данное ядро не поддерживает нужный нам чип Wifi, но зато поддерживает почти всю остальную периферию (RTC и управление контроллером питания не поддерживаются). 1) Скачиваем исходные тексты ядра wget http://mentorel.com/tmp/kernel-am3517somiq.tgz 2) компилируем (используем компилятор arm-2010q1) make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm am3517somiq_defconfig make CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm uImage modules полученный файл ядра uImage записывают на партицию FAT32 карты SD 3) Устанавливаем модули **Ядра Linux** на карту SD\\ Далее предполагается, что партиция ext2 SD карты подмонтирована к директории /media/rootfs sudo make ARCH=arm modules_install INSTALL_MOD_PATH=/media/rootfs ==== Компиляция WLAN драйвера для wl1271 ==== В ядре 2.6.37 для AM3517EVM драйвер wl1271 не подходит для нашей платы, поэтому будем использовать открытые драйвера для беспроводных чипов **compat-wireless**. Подробности здесь: [[http://linuxwireless.org/en/users/Drivers/wl12xx]] 1) Скачиваем исходные тексты драйвера wget http://mentorel.com/downloads/compat-wireless-2.6.37.tar.gz 2) Распаковываем архив tar xzf compat-wireless-2.6.37.tar.gz Получилась директория **compat-wireless-2.6** и в нее нужно зайти. 3) Компиляция драйвера wl1271\\ Обратите внимание, что ядро **уже** должно быть скомпилировано с модулями. Т.е. в директории с ядром должны быть все объектные файлы. Для простоты предположим, что полный путь к ядру Linux для нашей платформы такой (вы подставите свой путь): /home/user/kernel-am3517somiq. Тогда команды для компиляции драйвера wl1271 будут такими: cd compat-wireless-2.6 ./scripts/driver-select wl12xx make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- KLIB=/home/user/kernel-am3517somiq KLIB_BUILD=/home/user/kernel-am3517somiq Ошибок компиляции быть не должно! 4) Установка модулей на файловую систему\\ **//Далее описаны инструкции работы с уже установленной файловой системой на SD карту//** Сначала соберем модули, полученный при компиляции: find ./ | grep ko$ | xargs tar cvjf wireless-compat_modules.tar.bz2 Теперь нужно скопировать содержимое данного архива в директорию /lib/modules/2.6.37/updates **на** SD карте. Это можно выполнить либо подмонтировав SD карту на ПК, либо на рабочей платформе распаковать архив. Перенести файл архива на рабочую платформу можно по сети с помощью команды wget или через USB-диск, подключенный к разъему USB-host на плате. Далее команды выполняются на файловой системе нашего устройства: cd /lib/modules/2.6.37 mkdir updates cd updates tar xf wireless-compat_modules.tar.bz2 5) Установка загрузочных файлов для wl1271 в файловой системе одноплатного компьютера Сначала скачаем последнюю версию загрузочных файлов для wl1271 (это бинарные файлы, которые загружаются непосредственно в чип WLAN). git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git Получится директория **linux-firmware** из которой нам потребуется только папка **ti-connectivity**. Эту папку со всем содержимым необходимо скопировать в файловую систему в директорию /lib/firmware. Т.е. должна появится директория с полным именем: **/lib/firmware/ti-connectivity**. После загрузки системы необходимо обновить информацию о модулях. 6) **На загруженной системе выполняют команду "depmod -a" и перезагружают плату** ==== Установка файловой системы ==== Образ файловой системы был собран с помощью web-утилиты [[http://narcissus.angstrom-distribution.org/]] для платформы am3517-evm. В систему были добавлены i2c-tools и wireless-tools. Полученный образ файловой системы может быть скачан здесь: [[http://mentorel.com/tmp/image-am3517-evm.tar.gz]] 1) Скачиваем wget http://mentorel.com/tmp/image-am3517-evm.tar.gz 2) Монтируем раздел sdc2 sudo mount /dev/sdc2 /media/rootfs 3) записываем образ файловой системы на раздел SD карты cd /media/rootfs sudo tar xzf image-am3517-evm.tar.gz 4) Вносим исправления, чтобы файловая система грузилась с нашим ядром wget http://mentorel.com/tmp/fs.patch sudo patch -p1 < fs.patch 5) Отмонтируйте оба раздела SD карты и можно загружать плату. **SD карту устанавливают в разъем X27.** ==== busybox ==== 1) Скачиваем и распаковываем [[http://busybox.net/downloads/busybox-1.20.1.tar.bz2|busybox]] wget http://busybox.net/downloads/busybox-1.20.1.tar.bz2 tar xf busybox-1.20.1.tar.bz2 2) Компилируем make ARCH=arm oldconfig make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- 3) Устанавливаем sudo applets/install.sh /media/rootfs ===== Результаты тестирования ===== ==== Ethernet ==== root@am3517-crane:~# ifconfig eth0 Link encap:Ethernet HWaddr 7C:8E:E4:22:01:44 inet addr:192.168.0.111 Bcast:0.0.0.0 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:9 errors:0 dropped:0 overruns:0 frame:0 TX packets:29 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2660 (2.5 KiB) TX bytes:6421 (6.2 KiB) Interrupt:67 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) root@am3517-crane:~# ping ya.ru PING ya.ru (213.180.193.3): 56 data bytes 64 bytes from 213.180.193.3: seq=0 ttl=56 time=2.289 ms 64 bytes from 213.180.193.3: seq=1 ttl=56 time=2.471 ms 64 bytes from 213.180.193.3: seq=2 ttl=56 time=2.564 ms  --- ya.ru ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 2.289/2.441/2.564 ms root@am3517-crane:~# time wget ftp://192.168.0.104/file Connecting to 192.168.0.104 (192.168.0.104:21) file 100% |*******************************| 117M 00:00:00 ETA real 0m 35.42s user 0m 1.09s sys 0m 16.38s ==== USB ==== === USB HOST === К данному интерфейсу подключена микросхема FT4232HL, которая имеет 4 порта полных RS232 портов. Для данного устройства используется 3 порта RS232 (UART) для обеспечения 3-х интерфейсов RS-485. Лог загрузки ядра для микросхемы FT4232HL: USB Serial support registered for FTDI USB Serial Device ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected usb 1-1: Detected FT4232H usb 1-1: Number of endpoints 2 usb 1-1: Endpoint 1 MaxPacketSize 512 usb 1-1: Endpoint 2 MaxPacketSize 512 usb 1-1: Setting MaxPacketSize 512 usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0 ftdi_sio 1-1:1.1: FTDI USB Serial Device converter detected usb 1-1: Detected FT4232H usb 1-1: Number of endpoints 2 usb 1-1: Endpoint 1 MaxPacketSize 512 usb 1-1: Endpoint 2 MaxPacketSize 512 usb 1-1: Setting MaxPacketSize 512 usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB1 ftdi_sio 1-1:1.2: FTDI USB Serial Device converter detected usb 1-1: Detected FT4232H usb 1-1: Number of endpoints 2 usb 1-1: Endpoint 1 MaxPacketSize 512 usb 1-1: Endpoint 2 MaxPacketSize 512 usb 1-1: Setting MaxPacketSize 512 usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB2 ftdi_sio 1-1:1.3: FTDI USB Serial Device converter detected usb 1-1: Detected FT4232H usb 1-1: Number of endpoints 2 usb 1-1: Endpoint 1 MaxPacketSize 512 usb 1-1: Endpoint 2 MaxPacketSize 512 usb 1-1: Setting MaxPacketSize 512 usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB3 usbcore: registered new interface driver ftdi_sio ftdi_sio: v1.5.0:USB FTDI Serial Converters Driver Данный лог доказывает, что USB Host в режиме High Speed работает, т.к. микросхема FT4232H поддерживает только HS режим USB. Драйвер ftdio_sio сам создал необходимые ноды устройств в /dev: ttyUSB0, ttyUSB1, ttyUSB2, ttyUSB3. Эти ноды необходимы для дальнейшей работы с соответствующими интерфейсами RS-485. === USB OTG === Подключаем USB HUB к разъему X29 (USB-A), ядро выдает сообщение: root@am3517-crane:~# musb_h_ep0_irq 1119: no URB for end 0 usb 1-1: new high speed USB device using musb_hdrc and address 3 usb 1-1: New USB device found, idVendor=0409, idProduct=0059 usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0 hub 1-1:1.0: USB hub found hub 1-1:1.0: 4 ports detected Интерфейс USB OTG в режиме USB-host работает. ==== GPIO ==== Чтобы было проще проверять функционал GPIO все линии GPIO были добавлены в sysfs, поэтому работать с Реле и линиями ввода можно с помощью команд **cat** и **echo**. На SD карте, поставляемой с одноплатным компьютером присутствуют набор скриптов для настройки и управления линиями GPIO. Также этот набор скриптов находится по адресу: [[http://mentorel.com/tmp/gpio.tgz]]. В файле readme.txt описано как пользоваться скриптами. По уровням управляющих сигналов: 0 - реле в "разрыве", 1 - "короткое" === Реле 1 === root@am3517-crane:~# echo "out" > /sys/class/gpio/gpio99/direction root@am3517-crane:~# echo "0" > /sys/class/gpio/gpio99/value root@am3517-crane:~# echo "1" > /sys/class/gpio/gpio99/value слышны характерные щелчки и тестер, подключенный к контактам разъема Х18 соответственно показывает КЗ либо Разрыв. === Реле 2 === root@am3517-crane:~# echo "out" > /sys/class/gpio/gpio100/direction root@am3517-crane:~# echo "0" > /sys/class/gpio/gpio100/value root@am3517-crane:~# echo "1" > /sys/class/gpio/gpio100/value слышны характерные щелчки и тестер, подключенный к контактам разъема Х19 соответственно показывает КЗ либо Разрыв. === Реле 3 === root@am3517-crane:~# echo "out" > /sys/class/gpio/gpio101/direction root@am3517-crane:~# echo "0" > /sys/class/gpio/gpio101/value root@am3517-crane:~# echo "1" > /sys/class/gpio/gpio101/value слышны характерные щелчки и тестер, подключенный к контактам разъема Х20 соответственно показывает КЗ либо Разрыв. === Реле 4 === root@am3517-crane:~# echo "out" > /sys/class/gpio/gpio102/direction root@am3517-crane:~# echo "0" > /sys/class/gpio/gpio102/value root@am3517-crane:~# echo "1" > /sys/class/gpio/gpio102/value слышны характерные щелчки и тестер, подключенный к контактам разъема Х21 соответственно показывает КЗ либо Разрыв. === Реле 5 === root@am3517-crane:~# echo "out" > /sys/class/gpio/gpio103/direction root@am3517-crane:~# echo "0" > /sys/class/gpio/gpio103/value root@am3517-crane:~# echo "1" > /sys/class/gpio/gpio103/value слышны характерные щелчки и тестер, подключенный к контактам разъема Х23 соответственно показывает КЗ либо Разрыв. === Реле 6 === root@am3517-crane:~# echo "out" > /sys/class/gpio/gpio104/direction root@am3517-crane:~# echo "0" > /sys/class/gpio/gpio104/value root@am3517-crane:~# echo "1" > /sys/class/gpio/gpio104/value слышны характерные щелчки и тестер, подключенный к контактам разъема Х24 соответственно показывает КЗ либо Разрыв. === Реле 7 === root@am3517-crane:~# echo "out" > /sys/class/gpio/gpio105/direction root@am3517-crane:~# echo "1" > /sys/class/gpio/gpio105/value root@am3517-crane:~# echo "0" > /sys/class/gpio/gpio105/value слышны характерные щелчки и тестер, подключенный к контактам разъема Х25 соответственно показывает КЗ либо Разрыв. === Реле 8 === root@am3517-crane:~# echo "out" > /sys/class/gpio/gpio106/direction root@am3517-crane:~# echo "1" > /sys/class/gpio/gpio106/value root@am3517-crane:~# echo "0" > /sys/class/gpio/gpio106/value слышны характерные щелчки и тестер, подключенный к контактам разъема Х26 соответственно показывает КЗ либо Разрыв. === Реле 9 === root@am3517-crane:~# echo "out" > /sys/class/gpio/gpio155/direction root@am3517-crane:~# echo "1" > /sys/class/gpio/gpio155/value root@am3517-crane:~# echo "0" > /sys/class/gpio/gpio155/value слышны характерные щелчки и тестер, подключенный к контактам разъема Х22 соответственно показывает КЗ либо Разрыв между крайними контактами и центральным. **Далее цифровые входы (проверялись напряжением 10В)** === DIN 1 (разъем X32) === root@am3517-crane:~# echo "in" > /sys/class/gpio/gpio116/direction root@am3517-crane:~# cat /sys/class/gpio/gpio116/value 1 root@am3517-crane:~# cat /sys/class/gpio/gpio116/value 0 === DIN 2 (разъем X33) === root@am3517-crane:~# echo "in" > /sys/class/gpio/gpio117/direction root@am3517-crane:~# cat /sys/class/gpio/gpio117/value 1 root@am3517-crane:~# cat /sys/class/gpio/gpio117/value 0 === DIN 3 (разъем X34) === root@am3517-crane:~# echo "in" > /sys/class/gpio/gpio118/direction root@am3517-crane:~# cat /sys/class/gpio/gpio118/value 1 root@am3517-crane:~# cat /sys/class/gpio/gpio118/value 0 === DIN 4 (разъем X35) === root@am3517-crane:~# echo "in" > /sys/class/gpio/gpio119/direction root@am3517-crane:~# cat /sys/class/gpio/gpio119/value 1 root@am3517-crane:~# cat /sys/class/gpio/gpio119/value 0 === DIN 5 (разъем X36) === root@am3517-crane:~# echo "in" > /sys/class/gpio/gpio96/direction root@am3517-crane:~# cat /sys/class/gpio/gpio96/value 1 root@am3517-crane:~# cat /sys/class/gpio/gpio96/value 0 === DIN 6 (разъем X37) === root@am3517-crane:~# echo "in" > /sys/class/gpio/gpio97/direction root@am3517-crane:~# cat /sys/class/gpio/gpio97/value 1 root@am3517-crane:~# cat /sys/class/gpio/gpio97/value 0 === DIN 7 (разъем X38) === root@am3517-crane:~# echo "in" > /sys/class/gpio/gpio98/direction root@am3517-crane:~# cat /sys/class/gpio/gpio98/value 1 root@am3517-crane:~# cat /sys/class/gpio/gpio98/value 0 **Дип-переключатель 6ти сдвиговый** Сначала настраивают линии GPIO на ввод и потом можно смотреть состояние соответствующих линий посредством команд **cat** и **echo** echo "in" > /sys/class/gpio/gpio127/direction echo "in" > /sys/class/gpio/gpio129/direction echo "in" > /sys/class/gpio/gpio159/direction echo "in" > /sys/class/gpio/gpio158/direction echo "in" > /sys/class/gpio/gpio157/direction echo "in" > /sys/class/gpio/gpio161/direction Теперь можно смотреть состояния сдвигового переключателя echo "DIP-SW 1 = " `cat /sys/class/gpio/gpio127/value` echo "DIP-SW 2 = " `cat /sys/class/gpio/gpio129/value` echo "DIP-SW 3 = " `cat /sys/class/gpio/gpio159/value` echo "DIP-SW 4 = " `cat /sys/class/gpio/gpio158/value` echo "DIP-SW 5 = " `cat /sys/class/gpio/gpio157/value` echo "DIP-SW 6 = " `cat /sys/class/gpio/gpio161/value` ==== I2C шина ==== АЦП и ЦАП подключены к процессору через шину I2C. У процессора используется шина I2C-3. Проверяем есть ли устройства на шине i2c-3: root@am3517-crane:~# i2cdetect -r 3 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-3 using read byte commands. I will probe address range 0x03-0x77. Continue? [Y/n] y 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- 0c 0d -- -- 10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- -- 20: -- 21 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- Согласно документации: * Микросхема DA7, АЦП AD7993-0 (AS pin = GND): i2c address = 0x21 * Микросхема DD2, 1-Wire Master DS2482-800 (AD0=AD1=AD2 = GND): i2c address = 0x18 * Микросхема DA11, ЦАП AD5315 (A0 pin = GND): i2c address = 0x0c * Микросхема DA10, ЦАП AD5315 (A0 pin = 5V): i2c address = 0x0d Таким образом, шина i2c полностью рабочая, включая цифровые интерфейсы микросхем, подключенных к шине. ==== ADC (АЦП) ==== Для тестирования была написана утилита, которая в режиме SMbus выполняет оцифровку заданного канала АЦП ad7993. Текст программы [[http://mentorel.com/tmp/ad5315.tgz|здесь]] Для компиляции программы: * Скачиваем исходные тексты: wget http://mentorel.com/tmp/ad799x.tgz * Распаковываем: tar xzf ad799x.tgz cd ad799x * Прописываем путь к компилятору: export PATH=/opt/arm-2010q1/bin:$PATH * Компилируем: maxx@ubuntu:ad799x$ make arm-none-linux-gnueabi-gcc -g -Wall -O -c -o main.o main.c arm-none-linux-gnueabi-gcc -o adc-read main.o maxx@ubuntu:ad799x$ ls adc-read i2c-dev.h main.c main.o Makefile Получаем исполняемый файл **adc-read**, который необходимо выполнять на конечной платформе. Пример работы программы adc-read: root@am3517-pmvent:~# ./adc-read programm usage: adc-read channel number: 1-4 root@am3517-pmvent:~# ./adc-read 33 1 ADC[1]: HEX=0xa Voltage=0.10V Здесь использованы значения:\\ - 33 - адрес микросхемы на шине i2c (0x21) - 1 - номер канала АЦП (нумерация 1, 2, 3, 4 - не подключен) * канал 1 - разъем X11 * канал 2 - разъем X10 * канал 3 - разъем X9 По схеме на входе АЦП стоит делитель 1/2, который делит входное напряжение пополам. Опорное напряжение на АЦП равно 5В. Поэтому любое значение из регистра результата (REG_VAL) рассчитывается по формуле: Vin = REG_VAL * 2 * 5 / 1024 ==== DAC (ЦАП) ==== Для тестирования была написана утилита, которая выполняет загрузку сдвигового регистра микросхемы AD5315. Текст программы [[http://mentorel.com/tmp/ad5315.tgz|здесь]] Для компиляции программы: * Скачиваем исходные тексты: wget http://mentorel.com/tmp/ad5315.tgz * Распаковываем: tar xzf ad5315.tgz cd ad5315 * Прописываем путь к компилятору: export PATH=/opt/arm-2009q1/bin:$PATH * Компилируем: maxx@ubuntu:ad5315$ make arm-none-linux-gnueabi-gcc -g -Wall -O -c -o main.o main.c arm-none-linux-gnueabi-gcc -o dac-write main.o maxx@ubuntu:ad5315$ ls dac-write main.c main.o Makefile Получаем исполняемый файл **dac-write**, который необходимо выполнять на конечной платформе. Пример работы прогрмаммы dac-write: root@am3517-crane:~# ./dac-write 13 1 512 DAC: set i2c address to d DAC: set channel number to 1 DAC: pointer reg = 0x01 DAC: set shift register to 512 DAC: shift register MSB=0x28 LSB=0x00 Таким образом мы загрузили в ЦАП с адресом 0x0d (13), в первый канал (DACA) значение 512, соответствующее половине разрядной сетки ЦАП, т.е. на выходе ЦАП имеем напряжение Udac=Vref/2. В чем мы и убеждаемся с помощью вольтметра. Однако после ЦАП стоит операционный усилитель с коэффициентом усиления 2. Т.е. Uвых = 2 х Udac. Записываем значение 1023 в канал ЦАП и измеряем выходное напряжение на соответствующем разъеме. Проверены 5 каналов:\\ * ЦАП по адресу 13 (DA10) имеет 4 канала: * канал 1 (DACA) - разъем X13; * канал 2 (DACB) - разъем X12; * канал 3 (DACC) - разъем X15; * канал 4 (DACD) - разъем X14; * ЦАП по адресу 12 (DA11) имеет 1 канал (DACA) - разъем X16 ==== 1-Wire ==== На плате установлен 1w-мастер DS2482, имеющий 8 каналов. На изделии используется только 5. Микросхема DS2482 способна сама определять тип подключаемых устройств и выводит соответствующие сообщение на терминал. Для работы 1-wire мастера необходимо выполнить следующие дейсвтия: * загрузить модуль драйвера для устройства, подключенного к DS2482 * загрузить модуль драйвера DS2482 * сообщить адрес DS2482 на i2c-шине root@am3517-pmvent:~# modprobe w1_therm root@am3517-pmvent:~# modprobe ds2482 root@am3517-pmvent:~# echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-3/new_device [ 64.357482] i2c i2c-3: new_device: Instantiated device ds2482 at 0x18 root@am3517-pmvent:~# ls /sys/bus/w1/devices/ 28-000000a995a1 w1_bus_master3 w1_bus_master6 w1_bus_master1 w1_bus_master4 w1_bus_master7 w1_bus_master2 w1_bus_master5 w1_bus_master8 root@am3517-pmvent:~# cat /sys/bus/w1/devices/28-000000a995a1/w1_slave f3 01 4b 46 7f ff 0d 10 d3 : crc=d3 YES f3 01 4b 46 7f ff 0d 10 d3 t=31187 root@am3517-pmvent:~# cat /sys/bus/w1/devices/28-000000a995a1/w1_slave | tail -n 1 | awk -F= '{print $2/1000 " degrees Celsius"}' 31.562 degrees Celsius В предыдущем примере мы считали значения температуры с датчика DS18B20+ Нумерация каналов в схеме: - канал IO0 микросхемы, разъем X4 - канал IO1 микросхемы, разъем X5 - канал IO2 микросхемы, разъем X6 - канал IO7 микросхемы, разъем X7 - канал IO6 микросхемы, разъем X8 === Проблема с динамическим подключением === В данной версии ядра присутствует проблема с "гонками" между sysfs и регистрацией драйверов. Поэтому, при подключенном датчиком к одному каналу, затем вытаскиваем его и подключаем его к другому каналу, то сам модуль ds2482 перестает работает, но его можно реанимировать. Вообще, перед сменой каналов можно сначала выгрузить модуль ведомого драйвера, затем модуль ведущего ds2482 и затем снова загрузить нужные модули. В таком случае можно менять каналы ds2482 как угодно. Пример для одного датчика DS18B20+, который подключен к одному каналу, а затем его переключили к другому каналу ds2482: root@am3517-pmvent:~# lsmod Module Size Used by ds2482 3373 0 w1_therm 2580 0 root@am3517-pmvent:~# rmmod w1_therm [ 832.960327] w1_master_driver w1_bus_master1: Family 28 for 28.000000a995a1.2a is not registered. root@am3517-pmvent:~# rmmod ds2482 root@am3517-pmvent:~# modprobe w1_therm root@am3517-pmvent:~# modprobe ds2482 root@am3517-pmvent:~# ls /sys/bus/w1/devices/ 28-000000a995a1 w1_bus_master3 w1_bus_master6 w1_bus_master1 w1_bus_master4 w1_bus_master7 w1_bus_master2 w1_bus_master5 w1_bus_master8 root@am3517-pmvent:~# cat /sys/bus/w1/devices/28-000000a995a1/w1_slave d7 01 4b 46 7f ff 09 10 55 : crc=55 YES d7 01 4b 46 7f ff 09 10 55 t=29437 ==== CAN ==== На плате установлена микросхема физического уровня CAN: ISO1050DUB, позиционное обозначение DD4. Для согласования волнового сопротивления установлен резистор 120 Ом, который подключается между линиями CANH/CANL с помощью перемычки XT1. [[http://designsomething.org/craneboard/m/video/2139.aspx]] [[http://designsomething.org/cfs-file.ashx/__key/communityserver-components-sitefiles/CraneBoard/CAN_5F00_INTERFACE_5F00_CONNECTIVITY_5F00_ON_5F00_CRANEBOARD.pdf]] [[http://www.armadeus.com/wiki/index.php?title=CAN_bus_Linux_driver]] # opkg install canutils iproute2 Installing canutils (4.0.6-r1.0.5) to root... Downloading http://www.angstrom-distribution.org/feeds/unstable/ipk/glibc/armv5t e/base/canutils_4.0.6-r1.0.5_armv5te.ipk. Installing libsocketcan2 (0.0.8-r0.0.5) to root... Downloading http://www.angstrom-distribution.org/feeds/unstable/ipk/glibc/armv5t e/base/libsocketcan2_0.0.8-r0.0.5_armv5te.ipk. Installing iproute2 (2.6.38-r4.0.9) to root... Downloading http://www.angstrom-distribution.org/feeds/next/ipk/eglibc/armv5te/b ase/iproute2_2.6.38-r4.0.9_armv5te.ipk. Configuring iproute2. update-alternatives: Linking //bin/ip to /sbin/ip.iproute2 Configuring libsocketcan2. Configuring canutils. root@am3517-pmvent:~# ip link set can0 type can bitrate 125000 root@am3517-pmvent:~# ifconfig can0 up [ 3723.351562] ti_hecc ti_hecc: setting CANBTC=0xc0028 ==== RS-485 ==== Микросхема FT4232H по умолчанию настраивает линии свои линии RI#/TXDEN в режиме RI# (rs232), однако для управления направлением передачи данных RS-485 (полудуплекс) необходимо сконфигурировать микросхему FT4232H так, чтобы линии RI#/TXDEN перешли из режима RI в режим TXDEN. Для этого выполняют следующие действия (используя ОС Windows): 1) Скачивают и распаковывают драйвера VCP (virtual com port)\\ [[http://www.ftdichip.com/Drivers/CDM/CDM%202.08.24%20WHQL%20Certified.zip]] 2) Подключают специальный кабель к разъему X39 (как показано на картинке) и порту USB персонального компьютера {{x39.jpg}} 3) На запрос Windows об обнаружении нового устройства указывают путь к драйверам, полученным в шаге 1 4) После установки драйверов лучше отключить USB кабель от ПК и подключить его заново, чтобы система выполнила нумерацию USB устройств с установленными драйверами Теперь можно использовать утилиту FT_PROG 2.6.8 - EEPROM Programming Utility. Утилита для конфигурации памяти EEPROM, подключенной к FT4232HL, находится здесь: [[http://www.ftdichip.com/Support/Utilities/FT_Prog%20v2.6.8.zip]]. Утилиту необходимо скачать и она не требует установки. 1) Запустить FT_Prog.exe 2) В меню Devices->Scan and Parse\\ если все предыдущие действия выполнены правильно, то утилита считывает внутренние параметры микросхемы FT4232HL, а также содержимое EEPROM. 3) Выбираем HardwareSpecifics->Port_A\\ Устанавливаем галочку напротив "RI as RS485 Enable" 4) Повторяем шаг 3 для портов Port_B, Port_C, Port_D 5) В меню File выбираем Program Device 6) Закрываем программу Теперь микросхема FT4232HL будет управлять направлением передачи данных интерфейсных микросхем RS-485. Для тестирования интерфейса необходим кабель, сделанный по схеме, изображенной на следующем рисунке:\\ {{wiki:rs-485.jpg}} Интерфейс rs-485, соответствующий /dev/ttyUSB0, обеспечен микросхемой ADM3485 и имеет следующее назначение контактов (разъем X40): - нет подключений - нет подключений - RS-485 "B" - RS-485 "A" - нет подключений - нет подключений Для согласования волнового сопротивления имеется резистор 120 Ом, подключаемый перемычкой XT2. Интерфейсы rs-485, соответствующие /dev/ttyUSB1 (разъем X41) и /dev/ttyUSB2 (разъем X42), требуют внешнего питания 24В (по ТЗ, а ток от 6В будет работать). Микросхема [[http://www.maxim-ic.com/datasheet/index.mvp/id/5681|MAX13410EES]] имеет встроенный линейный регулятор напряжения и допускает питающее напряжение +6..+28В. Контакты на разъемах X41 и X42: - 24В - Земля (общий) - RS-485 "B" - RS-485 "A" - 24В - Земля (общий) * разъем X41 - для согласования волнового сопротивления имеется резистор 120 Ом, подключаемый перемычкой XT3. * разъем X42 - для согласования волнового сопротивления имеется резистор 120 Ом, подключаемый перемычкой XT4. С помощью простых команд echo и cat посылают и принимают данные между двумя устройствами. Если тестирование выполняется на одной плате с одним терминальным соединением, то с помощью следующей команды можно посылать символ "1" в интерфейс /dev/ttyUSB0 (rs-485 канал "0", разъем X40): root@am3517-pmvent:~# while [ 1 ] ; do echo "1" > /dev/ttyUSB0 && sleep 1 ; done & При этом поочередно переставляя кабель в два другие разъема rs-485 на плате и читая данные с двух других интерфейсов /dev/ttyUSB1 (разъем X41) и /dev/ttyUSB2 (разъем X42) можно убедится в работоспособности интерфейсов rs-485 root@am3517-pmvent:~# cat /dev/ttyUSB1 root@am3517-pmvent:~# cat /dev/ttyUSB2 ==== WLAN 802.11 ==== //Работа модуля WLAN возможна только при подключенной антенне! Антенну подключают к UFL разъему на самом модуле Tiwi-R2.// Для проверки работоспособности WLAN модуля используйте команды, описанные здесь: [[wlan-setup]] Обратите внимание, что интерфейс wlan0 будет иметь MAC-адрес DE:AD:BE:EF:00:00 при старте. Это значение по умолчанию, которое назначается автоматически. Чтобы избежать конфликтов в сети при активации нескольких wifi интерфейсов каждому из них необходимо присвоить свой MAC-адрес. ifconfig wlan0 down ifconfig wlan0 hw ether 00:22:33:44:55:66 ifconfig wlan0 up Дополнительная информация по этой теме здесь: [[http://omappedia.org/wiki/Mac80211_based_open_source_architecture]]