Это старая версия документа!
Содержание
Одноплатный компьютер ПМ-Вент v02
Описание
Назначение сигналов модуля uSomIQ
Разъем P2
№ контакта | Название линии ЦПУ | Назначение |
---|---|---|
18 | MCASP0_ACLKR.GPIO3_18 | Дип-перекл 1 |
20 | MCASP0_AHCLKR.GPIO3_17 | Дип-перекл 2 |
22 | MCASP0_AXR0.GPIO3_16 | Дип-перекл 3 |
24 | MCASP0_FSX.GPIO3_15 | Дип-перекл 4 |
26 | MCASP0_AHCLKX.GPIO3_21 | Дип-перекл 5 |
28 | MCASP0_ACLKX.GPIO3_14 | Дип-перекл 6 |
29 | UART0_RX | Консоль |
31 | UART0_TX | Консоль |
33 | I2C2_SCL | |
35 | I2C2_SDA | |
36 | SYS_RESETn | Сброс процессора |
37 | I2C1_SDA | |
38 | EVENT_INTR1.GPIO0_20 | USR_LED1 |
39 | I2C1_SCL | |
40 | EVENT_INTR0.GPIO0_19 | USR_LED2 |
41 | SPI0_CS1.GPIO0_6 | KSZ8851 IRQ |
43 | ECAP0_IN_PWM0_OUT.GPIO0_7 | KSZ8851 nRESET |
44 | DCAN_RX | CAN RX |
45 | SPI0_MOSI | KSZ8851 |
46 | DCAN_TX | CAN TX |
47 | SPI0_MISO | KSZ8851 |
48 | MMC0_DAT3 | MicroSD |
49 | SPI0_SCLK | KSZ8851 |
50 | MMC0_DAT2 | MicroSD |
51 | SPI0_CS0 | KSZ8851 |
52 | MMC0_DAT1 | MicroSD |
54 | MMC0_DAT0 | MicroSD |
55 | USB0_DRVBUS.GPIO0_18 | MicroSD CD |
56 | MMC0_CMD | MicroSD |
58 | MMC0_CLKO | MicroSD |
61 | USB0_P | USB HOST |
62 | ETH_RX_P | Ethernet 2 |
63 | USB0_N | USB HOST |
64 | ETH_RX_N | Ethernet 2 |
67 | ETH_speed100 | Ethernet 2 |
68 | ETH_TX_P | Ethernet 2 |
69 | ETH_ALINK | Ethernet 2 |
70 | ETH_TX_N | Ethernet 2 |
Разъем P3
№ контакта | Название линии ЦПУ | Назначение |
---|---|---|
35 | GPMC_CSN2.MMC1_CMD | WIFI SDIO_CMD |
37 | GPMC_CSN1.MMC1_CLK | WIFI SDIO_CLK |
39 | GPMC_CLK.GPIO2_1 | WIFI IRQ |
40 | GPMC_AD8.MMC1_DAT0 | WIFI SDIO_D0 |
41 | GPMC_AD11.MMC1_DAT3 | WIFI SDIO_D3 |
42 | GPMC_AD9.MMC1_DAT1 | WIFI SDIO_D1 |
43 | GPMC_AD12.GPIO1_12 | WIFI EN |
44 | GPMC_AD10.MMC1_DAT2 | WIFI SDIO_D2 |
45 | GPMC_AD13.GPIO1_13 | DI7 |
46 | GPMC_AD14.GPIO1_14 | DO1 |
47 | GPMC_A0.GPIO1_16 | DI6 |
48 | GPMC_AD15.GPIO1_15 | DO2 |
49 | GPMC_A1.GPIO1_17 | DI5 |
50 | GPMC_A6.GPIO1_22 | DO3 |
51 | GPMC_A2.GPIO1_18 | DI4 |
52 | GPMC_A7.GPIO1_23 | DO4 |
53 | GPMC_A3.GPIO1_19 | DI3 |
54 | GPMC_A8.GPIO1_24 | DO5 |
55 | GPMC_A4.GPIO1_20 | DI2 |
56 | GPMC_A9.GPIO1_25 | DO6 |
57 | GPMC_A5.GPIO1_21 | DI1 |
58 | GPMC_A10.GPIO1_26 | DO7 |
60 | GPMC_A11.GPIO1_27 | DO8 |
66 | GPMC_BE1.GPIO1_28 | DO9 |
67 | USB1_P | FTDI FT4232 |
69 | USB1_N | FTDI FT4232 |
Номера GPIO
Функция | Номер GPIO в Sysfs |
---|---|
DIP Switch 1 | 114 |
DIP Switch 2 | 113 |
DIP Switch 3 | 112 |
DIP Switch 4 | 111 |
DIP Switch 5 | 117 |
DIP Switch 6 | 110 |
Digital Input 1 | 53 |
Digital Input 2 | 52 |
Digital Input 3 | 51 |
Digital Input 4 | 50 |
Digital Input 5 | 49 |
Digital Input 6 | 48 |
Digital Input 7 | 45 |
Digital Output 1 | 60 |
Digital Output 2 | 59 |
Digital Output 3 | 58 |
Digital Output 4 | 57 |
Digital Output 5 | 56 |
Digital Output 6 | 55 |
Digital Output 7 | 54 |
Digital Output 8 | 47 |
Digital Output 9 | 46 |
Тестирование
Результаты
Функция | Работает? | Примечания |
---|---|---|
Консоль | Да | |
LEDs | Да | Status1-heartbeat, Status2- активность mmc0 |
MicroSD | Да | Загрузка с карты |
USB Host | Да | USB-флешка работает |
USB-FT4232 | Да | Микросхема определилась ядром |
USB-FT4232-PC | Да | Подключил к ПК и прочитал значения регистров в EEPROM |
Ethernet 1 (ksz8851) | Да | |
Ethernet 2 (встроенный) | Да | |
Реле (DO1-DO9) | Да | |
Ц.Входы (DI1-D7) | Да | |
Дип-переключатель | Да | |
1-wire | Да | Подключал один датчик температуры |
АЦП | Да | |
ЦАП | Да | |
RTC | Да | С батарейкой время считает, восстанавливает |
WIFI-Infrastructure | ||
WIFI-SoftAP | ||
CAN | ||
RS-485 | Да | Связь между портами COM1↔COM2↔COM3 |
Методика проверки
GPIO
DIN
root@arm:~/gpio# ./din.sh DIN 1 = 1 DIN 2 = 1 DIN 3 = 1 DIN 4 = 1 DIN 5 = 1 DIN 6 = 1 DIN 7 = 1 root@arm:~/gpio# ./din.sh DIN 1 = 0 DIN 2 = 1 DIN 3 = 1 DIN 4 = 1 DIN 5 = 1 DIN 6 = 1 DIN 7 = 1 root@arm:~/gpio# ./din.sh DIN 1 = 1 DIN 2 = 0 DIN 3 = 1 DIN 4 = 1 DIN 5 = 1 DIN 6 = 1 DIN 7 = 1 root@arm:~/gpio# ./din.sh DIN 1 = 1 DIN 2 = 1 DIN 3 = 0 DIN 4 = 1 DIN 5 = 1 DIN 6 = 1 DIN 7 = 1 root@arm:~/gpio# ./din.sh DIN 1 = 1 DIN 2 = 1 DIN 3 = 1 DIN 4 = 0 DIN 5 = 1 DIN 6 = 1 DIN 7 = 1 root@arm:~/gpio# ./din.sh DIN 1 = 1 DIN 2 = 1 DIN 3 = 1 DIN 4 = 1 DIN 5 = 0 DIN 6 = 1 DIN 7 = 1 root@arm:~/gpio# ./din.sh DIN 1 = 1 DIN 2 = 1 DIN 3 = 1 DIN 4 = 1 DIN 5 = 1 DIN 6 = 0 DIN 7 = 1 root@arm:~/gpio# ./din.sh DIN 1 = 1 DIN 2 = 1 DIN 3 = 1 DIN 4 = 1 DIN 5 = 1 DIN 6 = 1 DIN 7 = 0
DOUT
После старта ядра все реле находятся в разомкнутом состоянии, кроме 3-х позиционного реле, у которого два контакта из трех всегда замкнуты. Убеждаемся, что реле DO1-DO8 разомкнуты (например, с помощье тестера), а затем замыкаем все реле:
root@arm:~/gpio# ./set_r1.sh 1 root@arm:~/gpio# ./set_r2.sh 1 root@arm:~/gpio# ./set_r3.sh 1 root@arm:~/gpio# ./set_r4.sh 1 root@arm:~/gpio# ./set_r5.sh 1 root@arm:~/gpio# ./set_r6.sh 1 root@arm:~/gpio# ./set_r7.sh 1 root@arm:~/gpio# ./set_r8.sh 1 root@arm:~/gpio# ./set_r9.sh 1
Убеждаемся, что все реле замкнулись, а у DO9 замкнута вторая пара контактов
ДИП-переключатель
Проверяем с помощью скрипта dipsw.sh, который имеет содержимое:
echo "DIP-SW 1 = " `cat /sys/class/gpio/gpio114/value` echo "DIP-SW 2 = " `cat /sys/class/gpio/gpio113/value` echo "DIP-SW 3 = " `cat /sys/class/gpio/gpio112/value` echo "DIP-SW 4 = " `cat /sys/class/gpio/gpio111/value` echo "DIP-SW 5 = " `cat /sys/class/gpio/gpio117/value` echo "DIP-SW 6 = " `cat /sys/class/gpio/gpio110/value`
Последовательное чтение значений и сдвиг переключателей по одному с 1-го
root@arm:~/gpio# ./dipsw.sh DIP-SW 1 = 1 DIP-SW 2 = 1 DIP-SW 3 = 1 DIP-SW 4 = 1 DIP-SW 5 = 1 DIP-SW 6 = 1 root@arm:~/gpio# ./dipsw.sh DIP-SW 1 = 0 DIP-SW 2 = 1 DIP-SW 3 = 1 DIP-SW 4 = 1 DIP-SW 5 = 1 DIP-SW 6 = 1 root@arm:~/gpio# ./dipsw.sh DIP-SW 1 = 0 DIP-SW 2 = 0 DIP-SW 3 = 1 DIP-SW 4 = 1 DIP-SW 5 = 1 DIP-SW 6 = 1 root@arm:~/gpio# ./dipsw.sh DIP-SW 1 = 0 DIP-SW 2 = 0 DIP-SW 3 = 0 DIP-SW 4 = 1 DIP-SW 5 = 1 DIP-SW 6 = 1 root@arm:~/gpio# ./dipsw.sh DIP-SW 1 = 0 DIP-SW 2 = 0 DIP-SW 3 = 0 DIP-SW 4 = 0 DIP-SW 5 = 1 DIP-SW 6 = 1 root@arm:~/gpio# ./dipsw.sh DIP-SW 1 = 0 DIP-SW 2 = 0 DIP-SW 3 = 0 DIP-SW 4 = 0 DIP-SW 5 = 0 DIP-SW 6 = 1 root@arm:~/gpio# ./dipsw.sh DIP-SW 1 = 0 DIP-SW 2 = 0 DIP-SW 3 = 0 DIP-SW 4 = 0 DIP-SW 5 = 0 DIP-SW 6 = 0
1-wire
modprobe w1_therm modprobe ds2482 echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-3/new_device
Узнаем какое устройство появилось в системе:
root@arm:~# ls /sys/bus/w1/devices/ 28-000002000d1c/ w1_bus_master3/ w1_bus_master6/ w1_bus_master1/ w1_bus_master4/ w1_bus_master7/ w1_bus_master2/ w1_bus_master5/ w1_bus_master8/
Видно, что 28-000002000d1c является датчиком температуры (класс устройства 28). Считаем температуру:
root@arm:~# cat /sys/bus/w1/devices/28-000002000d1c/w1_slave af 01 4b 46 7f ff 01 10 bc : crc=bc YES af 01 4b 46 7f ff 01 10 bc t=26937
Текущее значение температуры 26.937 градусов Цельсия
АЦП
Адрес АЦП 32 (0x20) на шине I2c-3.
Компиляция тестового приложения adc-read:
ubuntu:ad799x$ export CC=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf- ubuntu:ad799x$ make CROSS_COMPILE=${CC} /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gcc -g -Wall -O -c -o main.o main.c /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gcc -o adc-read main.o ubuntu:ad799x$ ls adc-read i2c-dev.h main.c main.o Makefile
Поместите исполняемый файл adc-read в файловую систему на компьютере ПМ-Вент. Далее, подключаем источник напряжения и выполняем чтение поканально (на макете канал 2 не подключен):
root@arm:~# ./adc-read 32 1 ADC[4]: HEX=0x2cf Voltage=7.02V root@arm:~# ./adc-read 32 3 ADC[4]: HEX=0x2cd Voltage=7.00V root@arm:~# ./adc-read 32 4 ADC[4]: HEX=0x2cc Voltage=6.99V
ЦАП
Компиляция тестового приложения dac-write:
ubuntu:$ export CC=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf- ubuntu:ad5315$ make CROSS_COMPILE=${CC} /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gcc -g -Wall -O -c -o main.o main.c /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gcc -o dac-write main.o ubuntu:ad5315$ ls dac-write main.c main.o Makefile
Поместите исполняемый файл dac-write в файловую систему на компьютере ПМ-Вент.
1) Записываем нули в выходные каналы ЦАП:
root@arm:~# ./dac-write 13 1 0 DAC: set i2c address to d DAC: set channel number to 1 DAC: pointer reg = 0x01 DAC: set shift register to 0 DAC: shift register MSB=0x20 LSB=0x00 root@arm:~# ./dac-write 13 2 0 DAC: set i2c address to d DAC: set channel number to 2 DAC: pointer reg = 0x02 DAC: set shift register to 0 DAC: shift register MSB=0x20 LSB=0x00 root@arm:~# ./dac-write 13 3 0 DAC: set i2c address to d DAC: set channel number to 3 DAC: pointer reg = 0x04 DAC: set shift register to 0 DAC: shift register MSB=0x20 LSB=0x00 root@arm:~# ./dac-write 13 4 0 DAC: set i2c address to d DAC: set channel number to 4 DAC: pointer reg = 0x08 DAC: set shift register to 0 DAC: shift register MSB=0x20 LSB=0x00 root@arm:~# ./dac-write 14 0 0 DAC: set i2c address to e ERROR: DAC channel number 1-4 root@arm:~# ./dac-write 14 1 0 DAC: set i2c address to e DAC: set channel number to 1 DAC: pointer reg = 0x01 DAC: set shift register to 0 DAC: shift register MSB=0x20 LSB=0x00 ERROR: i2c transaction failed root@arm:~# ./dac-write 12 1 0 DAC: set i2c address to c DAC: set channel number to 1 DAC: pointer reg = 0x01 DAC: set shift register to 0 DAC: shift register MSB=0x20 LSB=0x00 root@arm:~# ./dac-write 12 2 0 DAC: set i2c address to c DAC: set channel number to 2 DAC: pointer reg = 0x02 DAC: set shift register to 0 DAC: shift register MSB=0x20 LSB=0x00 root@arm:~# ./dac-write 12 3 0 DAC: set i2c address to c DAC: set channel number to 3 DAC: pointer reg = 0x04 DAC: set shift register to 0 DAC: shift register MSB=0x20 LSB=0x00 root@arm:~# ./dac-write 12 4 0 DAC: set i2c address to c DAC: set channel number to 4 DAC: pointer reg = 0x08 DAC: set shift register to 0 DAC: shift register MSB=0x20 LSB=0x00
Проверяем вольтметром фактическое значение напряжение на выходах AO1 - AO8. На макете значения были от 0.04 до 0.06 вольт (измерено мультиметром Mastech M9508).
2) Записываем 512 в выходные каналы ЦАП, чтобы получить на выходе 5В:
root@arm:~# ./dac-write 12 1 512 DAC: set i2c address to c DAC: set channel number to 1 DAC: pointer reg = 0x01 DAC: set shift register to 512 DAC: shift register MSB=0x28 LSB=0x00 root@arm:~# ./dac-write 12 2 512 DAC: set i2c address to c DAC: set channel number to 2 DAC: pointer reg = 0x02 DAC: set shift register to 512 DAC: shift register MSB=0x28 LSB=0x00 root@arm:~# ./dac-write 12 3 512 DAC: set i2c address to c DAC: set channel number to 3 DAC: pointer reg = 0x04 DAC: set shift register to 512 DAC: shift register MSB=0x28 LSB=0x00 root@arm:~# ./dac-write 12 4 512 DAC: set i2c address to c DAC: set channel number to 4 DAC: pointer reg = 0x08 DAC: set shift register to 512 DAC: shift register MSB=0x28 LSB=0x00 root@arm:~# ./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 root@arm:~# ./dac-write 13 2 512 DAC: set i2c address to d DAC: set channel number to 2 DAC: pointer reg = 0x02 DAC: set shift register to 512 DAC: shift register MSB=0x28 LSB=0x00 root@arm:~# ./dac-write 13 3 512 DAC: set i2c address to d DAC: set channel number to 3 DAC: pointer reg = 0x04 DAC: set shift register to 512 DAC: shift register MSB=0x28 LSB=0x00 root@arm:~# ./dac-write 13 4 512 DAC: set i2c address to d DAC: set channel number to 4 DAC: pointer reg = 0x08 DAC: set shift register to 512 DAC: shift register MSB=0x28 LSB=0x00
Измеренное напряжение:
Канал | AO1 | AO2 | AO3 | AO4 | AO5 | AO6 | AO7 | AO8 |
---|---|---|---|---|---|---|---|---|
Напряжение, В | 4.97 | 5.02 | 5.01 | 5.01 | 5.02 | 5.03 | 5.02 | 4.98 |
3) Записываем 1023 в выходные каналы ЦАП, чтобы получить на выходе 10В:
root@arm:~# ./dac-write 12 1 1023 DAC: set i2c address to c DAC: set channel number to 1 DAC: pointer reg = 0x01 DAC: set shift register to 1023 DAC: shift register MSB=0x2f LSB=0xfc root@arm:~# ./dac-write 12 2 1023 DAC: set i2c address to c DAC: set channel number to 2 DAC: pointer reg = 0x02 DAC: set shift register to 1023 DAC: shift register MSB=0x2f LSB=0xfc root@arm:~# ./dac-write 12 3 1023 DAC: set i2c address to c DAC: set channel number to 3 DAC: pointer reg = 0x04 DAC: set shift register to 1023 DAC: shift register MSB=0x2f LSB=0xfc root@arm:~# ./dac-write 12 4 1023 DAC: set i2c address to c DAC: set channel number to 4 DAC: pointer reg = 0x08 DAC: set shift register to 1023 DAC: shift register MSB=0x2f LSB=0xfc root@arm:~# ./dac-write 13 1 1023 DAC: set i2c address to d DAC: set channel number to 1 DAC: pointer reg = 0x01 DAC: set shift register to 1023 DAC: shift register MSB=0x2f LSB=0xfc root@arm:~# ./dac-write 13 2 1023 DAC: set i2c address to d DAC: set channel number to 2 DAC: pointer reg = 0x02 DAC: set shift register to 1023 DAC: shift register MSB=0x2f LSB=0xfc root@arm:~# ./dac-write 13 3 1023 DAC: set i2c address to d DAC: set channel number to 3 DAC: pointer reg = 0x04 DAC: set shift register to 1023 DAC: shift register MSB=0x2f LSB=0xfc root@arm:~# ./dac-write 13 4 1023 DAC: set i2c address to d DAC: set channel number to 4 DAC: pointer reg = 0x08 DAC: set shift register to 1023 DAC: shift register MSB=0x2f LSB=0xfc
Измеренное напряжение:
Канал | AO1 | AO2 | AO3 | AO4 | AO5 | AO6 | AO7 | AO8 |
---|---|---|---|---|---|---|---|---|
Напряжение, В | 9.96 | 10.02 | 9.99 | 10.02 | 9.99 | 10.02 | 10.0 | 9.99 |
RS-485
CAN
Wifi
Настройка
Установка временной зоны
dpkg-reconfigure tzdata
Далее выбрать «Europe», затем «Minsk». Минск выбираем, потому что не все дистрибутивы Linux успевают следить за законами РФ в части перехода на зимнее время.
Время на изделии
Установка времени
Вручную
Формат команды date следующий:
date MMDDhhmm[ CC] YY[. ss]
где:
- MM - номер месяца
- DD - число
- hh - часы
- mm - минуты
- CCYY - год полностью (2014)
- .ss - секунды
Установим дату 25 декабря 2014г, 12:53
date 122512532014
Синхронизация времени по NTP
Локальное время можно синхронизировать с точными часами, которые работают на специальных часовых серверах. Сначала установите соответствующий пакет:
apt-get install ntp
Спустя несколько секунд после установки системные часы будут синхронизированы автоматически с мировым временем. Обязательное условие - активное сетевое подключение.
Запись времени в RTC
После записи текущего времени в RTC после перезагрузки платы или выключения питания время восстановится автоматически. Для записи времени в RTC выполните команду:
hwclock --systohc
Для чтения текущего значения времени в RTC выполните команду
hwclock
Для синхронизации системных часов со временем, идущим в RTC, выполните команду:
hwclock --hctosys