Инструменты пользователя

Инструменты сайта


wiki:pmvent2
no way to compare when less than two revisions

Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
Следующая версия
wiki:pmvent2 [2018/08/22 13:53] – [Ядро Linux] maxx
Строка 1: Строка 1:
 +**Одноплатный компьютер ПМ-Вент v02**
 +====== Компиляция ПО ======
 +===== u-boot =====
 +==== GCC Toolchain ====
  
 +<code>
 +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-
 +</code>
 +==== U-Boot Download ====
 +
 +Download U-Boot via git:
 +<code>
 +git clone git://git.denx.de/u-boot.git
 +cd u-boot/
 +git checkout v2014.10 -b tmp
 +</code>
 +
 +==== U-Boot Patches ====
 +Патч для платы pmvent0223
 +<code>
 +wget http://www.mentorel.ru/downloads/usomiq/patches/pmvent0223-u-boot-2014.diff
 +patch -p1 < pmvent0223-u-boot-2014.diff
 +</code>
 +==== U-Boot Configure and Build ====
 +
 +<code>
 +make ARCH=arm CROSS_COMPILE=${CC} distclean
 +make ARCH=arm CROSS_COMPILE=${CC} am335x_nand4k_defconfig
 +make ARCH=arm CROSS_COMPILE=${CC}
 +</code>
 +===== Ядро Linux =====
 +<code>
 +git clone https://github.com/RobertCNelson/bb-kernel
 +cd bb-kernel/
 +git checkout 4.14.51-bone16
 +</code>
 +Скачиваем и применяем патч:
 +<code>
 +wget http://www.mentorel.ru/downloads/usomiq/patches/pmvent-bb-kernel-4.14.patch
 +patch -p1 < pmvent-bb-kernel-4.14.patch
 +</code>
 +Запускаем компиляцию
 +<code>
 +./build_kernel.sh
 +</code>
 +
 +====== Описание ======
 +===== Назначение сигналов модуля 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 ===
 +<code>
 +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
 +</code>
 +=== DOUT ===
 +После старта ядра все реле находятся в разомкнутом состоянии, кроме 3-х позиционного реле, у которого два контакта из трех всегда замкнуты. Убеждаемся, что реле DO1-DO8 разомкнуты (например, с помощье тестера), а затем замыкаем все реле:
 +<code>
 +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
 +</code>
 +Убеждаемся, что все реле замкнулись, а у DO9 замкнута вторая пара контактов
 +=== ДИП-переключатель ===
 +Проверяем с помощью скрипта dipsw.sh, который имеет содержимое:
 +<code>
 +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`
 +</code>
 +Последовательное чтение значений и сдвиг переключателей по одному с 1-го
 +<code>
 +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
 +</code>
 +==== 1-wire ====
 +**Для ядра 3.2:**
 +<code>
 +modprobe w1_therm
 +modprobe ds2482
 +echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-3/new_device
 +</code>
 +**Для ядра 3.18, 4.14:**
 +<code>
 +modprobe w1_therm strong_pullup=0
 +modprobe ds2482
 +echo ds2482 0x18 > /sys/bus/i2c/devices/i2c-2/new_device
 +</code>
 +Узнаем какое устройство появилось в системе:
 +<code>
 +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/
 +</code>
 +Видно, что 28-000002000d1c является датчиком температуры (класс устройства 28). Считаем температуру:
 +<code>
 +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
 +</code>
 +Текущее значение температуры 26.937 градусов Цельсия
 +==== АЦП ====
 +Адрес АЦП 32 (0x21) на шине i2c-3 (ядро 3.2) либо на i2c-2 (ядро 3.18).
 +
 +Компиляция тестового приложения adc-read:
 +<code>
 +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
 +</code>
 +Поместите исполняемый файл adc-read в файловую систему на компьютере ПМ-Вент. Далее, подключаем источник напряжения и выполняем чтение поканально (на макете канал 2 не подключен):
 +<code>
 +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
 +</code>
 +
 +==== ЦАП ====
 +Компиляция тестового приложения dac-write:
 +<code>
 +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
 +</code>
 +Поместите исполняемый файл dac-write в файловую систему на компьютере ПМ-Вент.
 +
 +1) Записываем нули в выходные каналы ЦАП:
 +<code>
 +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
 +</code>
 +Проверяем вольтметром фактическое значение напряжение на выходах AO1 - AO8. На макете значения были от 0.04 до 0.06 вольт (измерено мультиметром Mastech M9508).
 +
 +2) Записываем 512 в выходные каналы ЦАП, чтобы получить на выходе 5В:
 +<code>
 +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
 +</code>
 +Измеренное напряжение:
 +^ Канал ^ 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В:
 +<code>
 +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
 +</code>
 +Измеренное напряжение:
 +^ Канал ^ 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 ===
 +<code>
 +./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><D1><0B><90> 
 +Reg [0] 3025 
 +</code>
 +=== COM2 ===
 +<code>
 +./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><D1><0B><90> 
 +Reg [0] 3025 
 +</code>
 +=== COM3 ===
 +<code>
 +./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><D1><0B><90> 
 +Reg [0] 3025 
 +</code>
 +==== CAN ====
 +==== Wifi ====
 +=== Подключение к точке доступа ===
 +<code>
 +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
 +</code>
 +
 +====== Настройка ======
 +===== Установка временной зоны =====
 +<code>
 +dpkg-reconfigure tzdata
 +</code>
 +Далее выбрать "Europe", затем "Minsk". Минск выбираем, потому что не все дистрибутивы Linux успевают следить за законами РФ в части перехода на зимнее время.
 +
 +===== Время на изделии =====
 +==== Установка времени ====
 +=== Вручную ===
 +Формат команды date следующий:
 +<code>
 +date 
 +MMDDhhmm[
 +CC]
 +YY[.
 +ss]
 +</code>
 +где:\\
 +  * MM - номер месяца
 +  * DD - число
 +  * hh - часы
 +  * mm - минуты
 +  * CCYY - год полностью (2014)
 +  * .ss - секунды
 +Установим дату 25 декабря 2014г, 12:53
 +<code>
 +date 122512532014
 +</code>
 +=== Синхронизация времени по NTP ===
 +Локальное время можно синхронизировать с точными часами, которые работают на специальных часовых серверах. Сначала установите соответствующий пакет:
 +<code>
 +apt-get install ntp
 +</code>
 +Спустя несколько секунд после установки системные часы будут синхронизированы автоматически с мировым временем. Обязательное условие - активное сетевое подключение.
 +=== Запись времени в RTC ===
 +После записи текущего времени в RTC после перезагрузки платы или выключения питания время восстановится автоматически. Для записи времени в RTC выполните команду:
 +<code>
 +hwclock --systohc
 +</code>
 +Для чтения текущего значения времени в RTC выполните команду
 +<code>
 +hwclock
 +</code>
 +Для синхронизации системных часов со временем, идущим в RTC, выполните команду:
 +<code>
 +hwclock --hctosys
 +</code>
wiki/pmvent2.txt · Последнее изменение: 2022/01/12 16:51 — 127.0.0.1