**Одноплатный компьютер ПМ-Вент v02**
====== Компиляция ПО ======
===== u-boot =====
==== GCC Toolchain ====
wget -c https://releases.linaro.org/archive/14.09/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
tar xf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
export CC=`pwd`/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-
==== U-Boot Download ====
Download U-Boot via git:
git clone git://git.denx.de/u-boot.git
cd u-boot/
git checkout v2014.10 -b tmp
==== U-Boot Patches ====
Патч для платы pmvent0223
wget http://www.mentorel.ru/downloads/usomiq/patches/pmvent0223-u-boot-2014.diff
patch -p1 < pmvent0223-u-boot-2014.diff
==== U-Boot Configure and Build ====
make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am335x_nand4k_defconfig
make ARCH=arm CROSS_COMPILE=${CC}
===== Ядро Linux =====
git clone https://github.com/RobertCNelson/bb-kernel
cd bb-kernel/
git checkout 4.14.52-bone16
Скачиваем и применяем патч:
wget http://www.mentorel.ru/downloads/usomiq/patches/pmvent-bb-kernel-4.14.patch
patch -p1 < pmvent-bb-kernel-4.14.patch
Запускаем компиляцию
./build_kernel.sh
====== Описание ======
===== Назначение сигналов модуля 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 |
| Buzzer Enable | 44 |
| 1-wire Enable | 27 |
====== Тестирование ======
===== Результаты =====
^ Функция ^ Работает? ^ Примечания ^
| Консоль | Да | |
| 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 |
===== Методика проверки =====
==== Светодиоды ====
Зеленый диод VSM PULSE
cd /sys/class/leds/pmvent\:green\:vsmpulse/
echo 1 > brightness
echo 0 > brightness
Красный диод ALARM
cd /sys/class/leds/pmvent\:red\:alarm/
echo 1 > brightness
echo 0 > brightness
==== 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
==== Buzzer ====
"1" - включает пищалку\\
"0" - выключает пищалку
echo 44 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio44/direction
echo "0" > /sys/class/gpio/gpio44/value
echo "1" > /sys/class/gpio/gpio44/value
==== 1-wire ====
=== Управление питанием на v0225 ===
//Питание должно быть подано на микросхему DS2482, иначе будут ошибки при загрузке драйвера.//
echo 27 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio27/direction
echo "0" > /sys/class/gpio/gpio27/value
echo "1" > /sys/class/gpio/gpio27/value
**Для ядра 3.2:**
modprobe w1_therm
modprobe ds2482
echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-3/new_device
**Для ядра 3.18, 4.14:**
modprobe w1_therm strong_pullup=0
modprobe ds2482
echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-2/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 (0x21) на шине i2c-3 (ядро 3.2) либо на i2c-2 (ядро 3.18).
Компиляция тестового приложения 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 33 1
ADC[4]: HEX=0x2cf Voltage=7.02V
root@arm:~# ./adc-read 33 3
ADC[4]: HEX=0x2cd Voltage=7.00V
root@arm:~# ./adc-read 33 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 ====
=== COM1 ===
./modbus_test --func 4 --id 86 --addr 1 --count 1 --device /dev/ttyUSB2 --debug 1
18-01-2015 00:20:20.373|i|000000| Attempt to open modbus context: device=/dev/ttyUSB2, speed=38400, parity=N, data_bits=8, stop_bits=2, sbc_fix=true
Opening /dev/ttyUSB2 at 38400 bauds (N, 8, 2)
18-01-2015 00:20:20.377|i|000000| [/dev/ttyUSB2] Byte timeout: 500
18-01-2015 00:20:20.378|i|000000| [/dev/ttyUSB2] Response timeout: 500
18-01-2015 00:20:20.379|i|000000| [/dev/ttyUSB2] Serial mode: MODBUS_RTU_RS232
18-01-2015 00:20:20.380|i|000000| Iteration count: 1/1
[56][04][00][01][00][01][6D][ED]
Waiting for a confirmation...
<56><04><02><0B><0B><90>
Reg [0] 3025
=== COM2 ===
./modbus_test --func 4 --id 86 --addr 1 --count 1 --device /dev/ttyUSB1 --debug 1
18-01-2015 00:20:20.373|i|000000| Attempt to open modbus context: device=/dev/ttyUSB2, speed=38400, parity=N, data_bits=8, stop_bits=2, sbc_fix=true
Opening /dev/ttyUSB2 at 38400 bauds (N, 8, 2)
18-01-2015 00:20:20.377|i|000000| [/dev/ttyUSB2] Byte timeout: 500
18-01-2015 00:20:20.378|i|000000| [/dev/ttyUSB2] Response timeout: 500
18-01-2015 00:20:20.379|i|000000| [/dev/ttyUSB2] Serial mode: MODBUS_RTU_RS232
18-01-2015 00:20:20.380|i|000000| Iteration count: 1/1
[56][04][00][01][00][01][6D][ED]
Waiting for a confirmation...
<56><04><02><0B><0B><90>
Reg [0] 3025
=== COM3 ===
./modbus_test --func 4 --id 86 --addr 1 --count 1 --device /dev/ttyUSB0 --debug 1
18-01-2015 00:20:20.373|i|000000| Attempt to open modbus context: device=/dev/ttyUSB2, speed=38400, parity=N, data_bits=8, stop_bits=2, sbc_fix=true
Opening /dev/ttyUSB2 at 38400 bauds (N, 8, 2)
18-01-2015 00:20:20.377|i|000000| [/dev/ttyUSB2] Byte timeout: 500
18-01-2015 00:20:20.378|i|000000| [/dev/ttyUSB2] Response timeout: 500
18-01-2015 00:20:20.379|i|000000| [/dev/ttyUSB2] Serial mode: MODBUS_RTU_RS232
18-01-2015 00:20:20.380|i|000000| Iteration count: 1/1
[56][04][00][01][00][01][6D][ED]
Waiting for a confirmation...
<56><04><02><0B><0B><90>
Reg [0] 3025
==== CAN ====
==== Wifi ====
=== Подключение к точке доступа ===
root@arm:~# ifconfig -a
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
NOARP MTU:16 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:10
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:55
eth0 Link encap:Ethernet HWaddr d0:ff:50:31:f4:62
BROADCAST MULTICAST MTU:1500 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:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
eth1 Link encap:Ethernet HWaddr 7e:e5:10:b3:19:6d
inet addr:192.168.1.113 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::7ce5:10ff:feb3:196d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:46 errors:0 dropped:0 overruns:0 frame:0
TX packets:35 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4702 (4.5 KiB) TX bytes:3162 (3.0 KiB)
Interrupt:166
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:344 (344.0 B) TX bytes:344 (344.0 B)
wlan0 Link encap:Ethernet HWaddr de:ad:be:ef:00:00
BROADCAST MULTICAST MTU:1500 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:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
root@arm:~# ip link set wlan0 up
[ 41.799835] wl1271: firmware booted (Rev 6.3.0.0.77)
[ 41.821868] ADDRCONF(NETDEV_UP): wlan0: link is not ready
root@arm:~# iwlist wlan0 scan
wlan0 Scan completed :
Cell 01 - Address: B8:A3:86:14:1D:98
Channel:1
Frequency:2.412 GHz (Channel 1)
Quality=22/70 Signal level=-88 dBm
Encryption key:on
ESSID:"lav"
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
18 Mb/s; 36 Mb/s; 54 Mb/s
Bit Rates:6 Mb/s; 12 Mb/s; 24 Mb/s; 48 Mb/s
Mode:Master
Extra:tsf=000000b6554ea16f
Extra: Last beacon: 1850ms ago
IE: Unknown: 00036C6176
IE: Unknown: 010882848B961224486C
IE: Unknown: 030101
IE: Unknown: 32040C183060
IE: Unknown: 0706525520010E14
IE: Unknown: 050400010000
IE: Unknown: 2A0104
IE: WPA Version 1
Group Cipher : TKIP
Pairwise Ciphers (1) : TKIP
Authentication Suites (1) : PSK
IE: Unknown: DD180050F2020101024003A4000027A4000042435E0062322F00
IE: Unknown: 0B0500001C127A
IE: Unknown: DD07000C4307000000
Cell 02 - Address: 20:CF:30:CE:27:F2
Channel:1
Frequency:2.412 GHz (Channel 1)
Quality=29/70 Signal level=-81 dBm
Encryption key:on
ESSID:"inet"
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
24 Mb/s; 36 Mb/s; 54 Mb/s
Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s
Mode:Master
Extra:tsf=0000027d4c573089
Extra: Last beacon: 1840ms ago
IE: Unknown: 0004696E6574
IE: Unknown: 010882848B962430486C
IE: Unknown: 030101
IE: Unknown: 2A0100
IE: Unknown: 2F0100
IE: Unknown: 32040C121860
IE: Unknown: DD870050F204104A00011010440001021041000100103B0001031047001020CF30CE27F220CF30CE27F20300D438102100074153555354656B1023000F576972656C65737320526F7574657210240009574C353030677076321042000234351054000800060050F2040001101100144153555320576972656C65737320526F75746572100800020088
IE: Unknown: DD090010180201F0000000
IE: WPA Version 1
Group Cipher : TKIP
Pairwise Ciphers (1) : TKIP
Authentication Suites (1) : PSK
====== Настройка ======
===== Установка временной зоны =====
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