**Одноплатный компьютер ПМ-Вент 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