Difference between revisions of "IoTGateway/Features/Linux/Peripheral"

From ESS-WIKI
Jump to: navigation, search
(UART)
(USB)
Line 326: Line 326:
  
 
==USB==
 
==USB==
Example
+
===Testing===
 +
Insert a USB disk
 +
usb 1-1.2: new high-speed USB device number 4 using ci_hdrc
 +
usb-storage 1-1.2:1.0: USB Mass Storage device detected
 +
scsi2 : usb-storage 1-1.2:1.0
 +
scsi 2:0:0:0: Direct-Access    Generic- SD/MMC          1.00 PQ: 0 ANSI: 0 CCS
 +
sd 2:0:0:0: [sda] 3862528 512-byte logical blocks: (1.97 GB/1.84 GiB)
 +
sd 2:0:0:0: [sda] Write Protect is off
 +
sd 2:0:0:0: [sda] No Caching mode page found
 +
sd 2:0:0:0: [sda] Assuming drive cache: write through
 +
sd 2:0:0:0: [sda] No Caching mode page found
 +
sd 2:0:0:0: [sda] Assuming drive cache: write through
 +
sda: sda1
 +
sd 2:0:0:0: [sda] No Caching mode page found
 +
sd 2:0:0:0: [sda] Assuming drive cache: write through
 +
sd 2:0:0:0: [sda] Attached SCSI removable disk
 +
 
 +
*According to the above content, we can know sda is our usb disk
 +
 
 +
Generate random file
 +
# dd if=/dev/urandom of=data bs=1 count=1024
 +
 
 +
Back up
 +
# dd if=/dev/sda of=backup bs=1 count=1024 skip=4096
 +
 
 +
Write to usb disk
 +
# dd if=data of=/dev/sda bs=1 seek=4096
 +
 
 +
Read and Verify
 +
# dd if=/dev/sda of=data1 bs=1 count=1024 skip=4096
 +
# diff data data1
 +
If fail, it shows as below:
 +
Binary files data1 and data differ
 +
 
 +
Restore
 +
# dd if=backup of=/dev/sda bs=1 seek=4096
  
 
==Watchdog==
 
==Watchdog==
 
Example
 
Example

Revision as of 10:48, 12 August 2016


ADC

analogue to digital converters

Backlight

The relevant files

/sys/class/graphics/fb0
/sys/devices/platform/mxc_sdc_fb.1/graphics/fb0
/sys/devices/platform/mxc_sdc_fb.1/graphics/fb0/power
/sys/devices/platform/mxc_sdc_fb.1
/sys/class/graphics
/sys/class/backlight
/sys/class/backlight/pwm-backlight.0

Turn off

echo 1 > /sys/class/backlight/pwm-backlight.0/bl_power

Turn on

echo 0 > /sys/class/backlight/pwm-backlight.0/bl_power

Brightness control

echo 0 > /sys/class/backlight/pwm-backlight.0/brightness
echo 255 > /sys/class/backlight/pwm-backlight.0/brightness

Camera

Example

CAN Bus

Configuration/Testing

Configuration

  • Connect can0 and can1

<CAN1_D+> connect to <CAN2_D+>

<CAN1_D-> connect to <CAN2_D->

# ip link set can0 up type can bitrate 125000
# ip link set can1 up type can bitrate 125000

Testing

  • Test 1
# candump can1 &
# cansend can0 12345678#123412341234

The following shows the result

can1  12345678   [6]  12 34 12 34 12 34
  • Test 2
# cansend can0 133#ababdede

The following shows the result

can1       133   [4]  AB AB DE DE

CPU

CPU Frequency

Using available CPU frequency policies

Read CPU frequency

# cpufreq-info  | grep "current CPU frequency"
current CPU frequency is 396 MHz (asserted by call to hardware).
current CPU frequency is 396 MHz (asserted by call to hardware).
current CPU frequency is 396 MHz (asserted by call to hardware).
current CPU frequency is 396 MHz (asserted by call to hardware).

Check available CPU frequency policy

# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
conservative ondemand userspace powersave interactive performance

Change CPU frequency policy

# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

Check CPU frequency

# cpufreq-info  | grep "current CPU frequency"
current CPU frequency is 996 MHz (asserted by call to hardware).
current CPU frequency is 996 MHz (asserted by call to hardware).
current CPU frequency is 996 MHz (asserted by call to hardware).
current CPU frequency is 996 MHz (asserted by call to hardware).
Setting the CPU frequency explicitly

Read available CPU frequenies

# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
396000 792000 996000

Change CPU frequency explicitly

# echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# echo 792000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed

Check CPU frequency

# cpufreq-info  | grep "current CPU frequency"
current CPU frequency is 792 MHz (asserted by call to hardware).
current CPU frequency is 792 MHz (asserted by call to hardware).
current CPU frequency is 792 MHz (asserted by call to hardware).
current CPU frequency is 792 MHz (asserted by call to hardware).


CPU Hot-Plugging

Manually turn off CPU cores

#echo 0 >  /sys/devices/system/cpu/cpu1/online
CPU1: shutdown
  • Can't turn off cpu0

Check CPU is turned off

#cat /proc/interrupts | head -n 1 
 CPU0       CPU2       CPU3

Ethernet

Example

Framebuffer

Example

GPIO

Configuration/Testing

Configuration

Export GPIO then you can use control GPIO from userr space through sysfs

GPIO 27 is taken as an example:

Export GPIO 27

# echo 27 /sys/class/gpio/export

Set GPIO direction to in/out

# echo "in" > /sys/class/gpio/gpio27/direction

Set GPIO value 0/1 if GPIO pin define is output

#  echo 1 > /sys/class/gpio/gpio27/value

Directly force a GPIO to output and set its initial value(high=1 low=0)

# echo high > /sys/class/gpio/gpio27/direction

Used as IRQ signal

Note:You have to configure GPIO to input

#  echo "rising" > /sys/class/gpio/gpio27/edge
  • rising: Trigger on rising edge
  • falling: Trigger on falling edge
  • both: Trigger on both edges
  • none: Disable interrupt on both edges

Unexport GPIO 27

# echo 27 /sys/class/gpio/unexport

Testing

GPIO 27 and GPIO 29 are taken as an example:

  • Connect GPIO 27 and GPIO 29
  • Export GPIO 27 and GPIO 29
# echo 27 /sys/class/gpio/export
# echo 29 /sys/class/gpio/export
  • Set GPIO 27 to output
# echo "out" > /sys/class/gpio/gpio27/direction
  • Set GPIO 29 to input
# echo "in" > /sys/class/gpio/gpio29/direction
  • Change GPIO 27 to 1 and read GPIO 29 value
# echo 1 > /sys/class/gpio/gpio27/value
# cat /sys/class/gpio/gpio29/value
1
  • Change GPIO 27 to 0 and read GPIO 29 value
# echo 0 > /sys/class/gpio/gpio27/value
# cat /sys/class/gpio/gpio29/value
0

GPS

GPS module ublox 5

  • linux kernel config

Device Drivers --->
[*] USB support --->
<*> USB Modem (CDC ACM) support
[*] USB Gadget Support
[m] USB Gadget Drivers
[*] USB support --->
[*] Support for Freescale on-chip EHCI USB controller
<*> USB Serial Converter support --->
[*] USB Generic Serial Driver

  • list usb device
    no device
    GPS ublox 5 lsusb nodevice.png
    device plugged in
    GPS ublox 5 lsusb.png
  • testing
    GPS ublox 5 real test.png

I2C

Testing

Check i2c busses

  • Usage: i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST]
#i2cdetect -l
i2c-0   i2c             21a0000.i2c                             I2C adapter
i2c-1   i2c             21a4000.i2c                             I2C adapter
i2c-2   i2c             21a8000.i2c                             I2C adapter

Check devices on i2c-2 bus

#i2cdetect -y -r 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: UU UU -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- UU --

Dump I2C device register content

  • Usage: i2cdump [-f] [-y] [-r first-last] I2CBUS ADDRESS [MODE [BANK [BANKREG]]]
# i2cdump -y -f 2 0x76
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 54 00 80 43 40 40 40 00 00 00 00 00 00 00 ff ff    T.?C@@@S........
10: 85 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ?...............
20: 00 00 00 18 ff ff ff ff ff ff ff ff ff ff ff ff    ...?............
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
80: 54 00 80 43 40 40 40 53 00 00 00 00 00 00 ff ff    T.?C@@@S........
90: 85 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ?...............
a0: 00 00 00 18 ff ff ff ff ff ff ff ff ff ff ff ff    ...?............
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................


Read a single byte

  • Usage: i2cget [-f] [-y] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]]
# i2cget -f -y 2 0x76 7
0x00

Change its value and verify it

  • Usage: i2cset [-f] [-y] [-m MASK] [-r] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]
# i2cset -f -y 2 0x76 7 0x53
# i2cget -f -y 2 0x76 7
0x53

IR

To decode the infrared signals and provide an uniform interface

lircd -d /dev/lirc0

used parameters:

-d --device=device    read from given device
-u --uinput           generate Linux input events

Executes commands on an IR signal decoded by lircd,

irexec -d /devlirc0

Note: if show these message after running lircd

lircd: can't open or create /var/run/lirc/lircd.pid
lircd: No such file or directory

It has to add the "/var/run/lirc" folder

mkdir /var/run/lirc

How to debug:

1. To check that signals are decoded correctly

mode2 -d /dev/lirc0

It repeats to show "space" and "pulse" while clicking a control button

space 8451531
pulse 476

2. To check input events.

First, It must add the parameter,"-u", in lircd command

lircd -d /dev/lirc0 -u

It will register at inputX,

input: lircd as /devices/virtual/input/input1 

Run evtest to check events

evtest -d /dev/input/event1

One Wire

Example

RTC

Example

SATA

Example

SD/MMC

Example

SPI

Example

SPWG/JEDIA

Standard Panels Working Group (SPWG)

Japan Electronic Industry Development Association (JEIDA)

How to setting SPWG/JEIDA mode in RISC?

Modify Register GPR(IOMUXC_GPR2)value

Address : 0x020E0008(h)

BIT6 and BIT8 set "0" (SPWG)

BIT6 and BIT8 set "1" (JEIDA)

JEIDA1.png
JEIDA2.png

UART

RS-232

Configuration

Connect UART1(ttymxc1) TX and RX

Use stty command to set baudrate

# stty -F /dev/ttymxc1 115200

Testing

Check baudrate

# stty -F /dev/ttymxc1 115200
speed 115200 baud; line = 0;

Read

#cat /dev/ttymxc1 &

Send

#echo test > /dev/ttymxc1 
test

USB

Testing

Insert a USB disk

usb 1-1.2: new high-speed USB device number 4 using ci_hdrc
usb-storage 1-1.2:1.0: USB Mass Storage device detected
scsi2 : usb-storage 1-1.2:1.0
scsi 2:0:0:0: Direct-Access     Generic- SD/MMC           1.00 PQ: 0 ANSI: 0 CCS
sd 2:0:0:0: [sda] 3862528 512-byte logical blocks: (1.97 GB/1.84 GiB)
sd 2:0:0:0: [sda] Write Protect is off
sd 2:0:0:0: [sda] No Caching mode page found
sd 2:0:0:0: [sda] Assuming drive cache: write through
sd 2:0:0:0: [sda] No Caching mode page found
sd 2:0:0:0: [sda] Assuming drive cache: write through
sda: sda1
sd 2:0:0:0: [sda] No Caching mode page found
sd 2:0:0:0: [sda] Assuming drive cache: write through
sd 2:0:0:0: [sda] Attached SCSI removable disk
  • According to the above content, we can know sda is our usb disk

Generate random file

# dd if=/dev/urandom of=data bs=1 count=1024

Back up

# dd if=/dev/sda of=backup bs=1 count=1024 skip=4096

Write to usb disk

# dd if=data of=/dev/sda bs=1 seek=4096

Read and Verify

# dd if=/dev/sda of=data1 bs=1 count=1024 skip=4096
# diff data data1

If fail, it shows as below:

Binary files data1 and data differ

Restore

# dd if=backup of=/dev/sda bs=1 seek=4096

Watchdog

Example