Appunti sui test della CM3-Home

Stato di avanzamento test sul prototipo iniziale e appunti di lavoro

Elenco dei test superati

| OK | Alimentazione non opto 1.8 volt | Verificato con il tester
| OK | Alimentazioni non opto 3.3 volt | Verificato con il tester
| OK | Alimentazioni non opto 5.0 volt | Verificato con il tester
| OK | DC-DC 5/5                       | Verificato con il tester
| OK | DC-DC 5/15                      | Verificato con il tester
| OK | Led blu alimentazione           | Si accende
| OK | Debug port                      | Verificato collegando un terminale seriale su TXD e RXD a 115200 bps
| OK | MicroSD                         | Verificato con boot completo di Linux
| OK | Zoccolo raspberry               | Verificato con boot completo di Linux
| OK | Rele 1                          | Verificato attivando i GPIO (Verificare i contatti sui morsetti)
| OK | Rele 2                          | Verificato attivando i GPIO (Verificare i contatti sui morsetti)
| OK | Input opto 1                    | Verificato ponticellando i morsetti e leggendo i GPIO
| OK | Input opto 2                    | Verificato ponticellando i morsetti e leggendo i GPIO
| OK | Led RGB Green                   |
| OK | Led RGB Reden                   |
| OK | Led RGB Blue                    | Rimane semi acceso per via della resistenza di pull-down interna alla CPU
| OK | Audio                           | Testato con omxplayer
| OK | Connettore di Exp 8+8 J3        | Testati tutti i singoli GPIO
| OK | Infrarosso                      | Testato come da datasheet e con telecomando IR
| OK | 1-Wire                          | Provato con DS18B20
| OK | I2C                             |
| OK | RS485                           | Richiede la programmazione del chip FT4232
| OK | DALI bus                        | 
| OK | Connettore telecamera MIPI      |
| OK | LAN9514                         | Verificato provando le periferiche a valle
| OK |   USB 1                         | Verificato inserendo una chiavetta di memoria USB
| OK |   USB 2                         | Verificato inserendo una chiavetta di memoria USB
| OK |   WiFi                          | Verificato con lsusb
| OK |   Ethernet                      | Verificato accedendo ad Internet
| OK | FT4232H                         | Si annuncia con lsusb e monta correttamente i device /dev/ttyUSB0-1-2-3
| OK |   RS232                         | Loopback hardware (/dev/ttyUSB3)
| OK |   Seriale Yarm                  | Loopback hardware ingresso Yarm (/dev/ttyUSB1)
| OK | Programmazione JTAG ATA8510     | Provato con Atmel ICE
| OK | Programmazione JTAG SAM L21     | Provato con Atmel ICE
| OK | ADC converter su Yarm           | Richiede un programmino su Yarm

Test da fare

| -- | KNX bus                         | Manca una induttanza

ADC su Yarm

Pin usati:

Morsetto Analog line Yarm pin # Signal
1 A_IN4 8 ADC1
2 Analog common
3 A_IN3 9 ADC0
4 Analog common
5 A_IN2 14 ADC18
6 Analog common
7 A_IN1 15 ADC19
8 Analog common

Collegarsi con minicom sulla seriale attestata alla Yarm e dopo aver visualizzato il prompt premere "r" per leggere i valori di tensione sui morsetti.

DALI

Pin usati:

  • TX su GPIO31
  • RX su GPIO30

Utility in Python usata per fare un controllo dimmerato con un ballast PowerLed

IR

La linea a cui è connesso il sensore IR è GPIO 20. Per abilitarlo in config.txt bisogna aggiungere:

dtoverlay=gpio-ir,gpio_pin=20

Installare ir-keytable

sudo apt-get install ir-keytable

Lanciare il comando

sudo ir-keytable -p rc-5

Quindi

ir-keytable -t -v

Programmazione del chip FT4232H

Occorre scaricare i sorgenti della libreria libftdi versione 1.4

wget https://www.intra2net.com/en/developer/libftdi/download/libftdi1-1.4.tar.bz2
tar -xvjf libftdi1-1.4.tar.bz2
cd libftdi1-1.4

Bisogna installare diversi pacchetti:

sudo apt-get install libconfuse-dev libboost-dev libusb-1.0.0-dev swig cmake

Quindi compilare la libreria (vedi le istruzioni nel file README)

Una volta installato il tutto si può usare l'utility ftdi_eeprom con il seguente file di configurazione cm3home.conf:

# CM3-HOME EEPROM configuration for FT4232H

vendor_id=0x0403    # Vendor ID
product_id=0x6011   # Product ID
eeprom_type=0x56

max_power=0     # Max. power consumption: value * 2 mA. Use 0 if self_powered = true.

# Strings
manufacturer="Acme Systems srl"     # Manufacturer
product="CM3-Home board"            # Product
serial="01-01"                      # Serial

# Options 
self_powered=true           # Turn this off for bus powered
remote_wakeup=false         # Turn this on for remote wakeup feature
use_serial=true             # Use the serial number string

# Normally out don't have to change one of these flags
in_is_isochronous=false     # In Endpoint is Isochronous
out_is_isochronous=false    # Out Endpoint is Isochronous
suspend_pull_downs=false    # Enable suspend pull downs for lower power
change_usb_version=false    # Change USB Version
usb_version=0x0200          # Only used when change_usb_version is enabled

cha_type=UART
chb_type=UART

cha_vcp=true
chb_vcp=true
chc_vcp=true
chd_vcp=true

cha_rs485=true
chb_rs485=true
chc_rs485=true
chd_rs485=true

# Filename, leave empty to skip file writing
filename="cm3home.bin"  

Per creare un file binario cm3home.bin

ftdi_eeprom --build-eeprom cm3home.conf

Per cancellare la flash

ftdi_eeprom --erase-eeprom cm3home.conf

Per scrivere sulla flash

ftdi_eeprom --flash-eeprom cm3home.conf

Quando di fa il flash della EEPROM l'FT4232H si resetta quindi e possibile vedere come si riannuncia con il comando:

dmesg
[    3.110943] usb 1-1.5: New USB device found, idVendor=0403, idProduct=6011
[    3.121047] usb 1-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    3.121052] usb 1-1.5: Product: CM3-Home board
[    3.121055] usb 1-1.5: Manufacturer: Acme Systems srl
[    3.121064] usb 1-1.5: SerialNumber: 01-01

Le stringhe presenti del file cm3home.conf sono visualizzabili anche con i seguenti comandi:

cat /sys/bus/usb/devices/*/manufacturer
cat /sys/bus/usb/devices/*/product
cat /sys/bus/usb/devices/*/serial   

oppure

usb-devices

Connettore di espansione (8+8) J3

Pin # Segnale Linea CPU
1 3V3 out
2 3V3 out
3 SPI0 CE1 GPIO 7
4 Display backlight GPIO 18
5 SPI0 CE0 GPIO 8
6 Display reset GPIO 23
7 SPI0 MOSI GPIO 10
8 Display D/C GPIO 24
9 SPI0 MISO GPIO 9
10 Display IRQ GPIO 25
11 GND
12 Display GPIO GPIO 26
13 SPI0 SCLK GPIO 11
14 Available GPIO 27
15 GND
16 GND

Links

Display SPI su connettore J3

Camera

La procedura per vedere la telecamera sulla CM3-Home è descritta qui:

In pratica bisogna abilitare la telecamera con:

sudo raspi-config

Quindi scaricare un file binario dal sito Raspberry:

sudo wget http://goo.gl/U4t12b -O /boot/dt-blob.bin

Fare il reboot e verificare se la telecamera è stata rilevata con:

$ vcgencmd get_camera
supported=1 detected=1

Per scattare una foto:

raspistill -v -o test.jpg

Links

I2C su morsetto

La I2C riportata su morsetto esterno corrisponde ai segnali:

  • GPIO 44 SDA
  • GPIO 45 SCL

Per attivarla bisogna abilitare l'i2c da raspi-config e inserire le seguenti linee in config.txt:

#I2C su morsetto
#(https://github.com/raspberrypi/linux/blob/rpi-4.9.y/arch/arm/boot/dts/overlays/README#L783)
dtparam=i2c_arm=on
dtparam=i2c_arm_baudrate=400000
dtoverlay=i2c1-bcm2708,sda1_pin=44,scl1_pin=45,pin_func=6

I2C in bit banging su J3

Come definirla in /boot/config.txt:

Name:   i2c-gpio
Info:   Adds support for software i2c controller on gpio pins
Load:   dtoverlay=i2c-gpio,<param>=<val>
Params: i2c_gpio_sda            GPIO used for I2C data (default "23")

        i2c_gpio_scl            GPIO used for I2C clock (default "24")

        i2c_gpio_delay_us       Clock delay in microseconds
                                (default "2" = ~100kHz)

Come l'ho definita in /boot/config.txt per fare il test:

dtoverlay=i2c-gpio,i2c_gpio_sda=11,i2c_gpio_scl=27
  • J3.13 = SDA
  • J3.14 = SCL

Si annuncia come /dev/i2c3

Links

1-Wire

config.txt

dtoverlay=w1-gpio,gpiopin=16

Provato con DS18B20

cat /sys/bus/w1/devices/28-0000059707f3/w1_slave
dc 01 4b 46 7f ff 04 10 33 : crc=33 YES
dc 01 4b 46 7f ff 04 10 33 t=29750

LED RGB

  • GPIO 35 Green 0=on
  • GPIO 36 Red 0=on
  • GPIO 37 Blue 0=on

Script di test

echo 35 > /sys/class/gpio/export
echo 36 > /sys/class/gpio/export
echo 37 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio35/direction
echo "out" > /sys/class/gpio/gpio36/direction
echo "out" > /sys/class/gpio/gpio37/direction

for i in {1..5}
do
    echo "0" > /sys/class/gpio/gpio35/value
    echo "1" > /sys/class/gpio/gpio36/value
    echo "1" > /sys/class/gpio/gpio37/value
    sleep 1

    echo "1" > /sys/class/gpio/gpio35/value
    echo "0" > /sys/class/gpio/gpio36/value
    echo "1" > /sys/class/gpio/gpio37/value
    sleep 1

    echo "1" > /sys/class/gpio/gpio35/value
    echo "1" > /sys/class/gpio/gpio36/value
    echo "0" > /sys/class/gpio/gpio37/value
    sleep 1
done
echo 35 > /sys/class/gpio/unexport
echo 36 > /sys/class/gpio/unexport
echo 37 > /sys/class/gpio/unexport

Device tree di definizione dei gpio

  • Led verde heartbeat
  • Led rosso attività su mmc0
  • Led blu spento


/dts-v1/;
/plugin/;
/ {
    compatible = "brcm,bcm2708";

    fragment@0 {
        target = <&leds>;
        __overlay__ {

            rgb_green: rgb_green {
                label = "rgb_green";
                gpios = <&gpio 35 1>;
                linux,default-trigger = "heartbeat";
            };

            rgb_red: rgb_red {
                label = "rgb_red";
                gpios = <&gpio 36 1>;
                linux,default-trigger = "mmc0";
            };


            rgb_blue: rgb_blue {
                label = "rgb_blue";
                gpios = <&gpio 37 1>;
                linux,default-trigger = "none";
            };
        };
    };
};

Elenco dei trigger definibili:

[none] kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 default-on input panic mmc0

Come compilare l'overlay

sudo apt-get update
apt-get install device-tree-compiler

sudo dtc -@ -I dts -O dtb -o /boot/overlays/cm3-home-leds.dtbo cm3-home-leds.dts 

E poi aggiungere a /boot/config.txt le riga:

#CM3-Home led definition
dtoverlay=cm3-home-leds

Fare reboot poi per controllare che l'overlay è stato caricato bene:

sudo vcdbg log msg

Le seguenti directory dovrebbero essere create dopo il boot:

$ ls -al /sys/class/leds/rgb*
lrwxrwxrwx 1 root root 0 Oct  5 12:59 /sys/class/leds/rgb_blue -> ../../devices/platform/leds/leds/rgb_blue
lrwxrwxrwx 1 root root 0 Oct  5 12:59 /sys/class/leds/rgb_green -> ../../devices/platform/leds/leds/rgb_green
lrwxrwxrwx 1 root root 0 Oct  5 12:59 /sys/class/leds/rgb_red -> ../../devices/platform/leds/leds/rgb_red

Test audio

Devono essere abilitati i PWM sulle linee 40 e 41 (vedi config.txt in basso)

Accensione WiFi

  • GPIO 34 WiFi ON

ON

echo 34 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio34/direction                                   
echo "1" > /sys/class/gpio/gpio34/value

OFF

echo "0" > /sys/class/gpio/gpio34/value

Input optoisolati

  • Inp 1 GPIO 28
  • Inp 2 GPIO 29

Script di prova:

echo 28 > /sys/class/gpio/export
echo 29 > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio28/direction                                   
echo "in" > /sys/class/gpio/gpio29/direction                                   

for i in {1..5}
do
    cat /sys/class/gpio/gpio28/value                                         
    cat /sys/class/gpio/gpio29/value                                
    sleep 1

    cat /sys/class/gpio/gpio28/value                                         
    cat /sys/class/gpio/gpio29/value                                
    sleep 1
done
echo 28 > /sys/class/gpio/unexport
echo 29 > /sys/class/gpio/unexport

DALI

Debug port

Bisogna disabilitazione la porta di debug di default su UART0 (GPIO14 e GPIO15) e abilitare la UART0 su GPIO32 e GPIO33

config.txt

#Sposta la debug port seriale sulle linee 32 e 33
force_turbo=1
dtoverlay=uart1,txd1_pin=32,rxd1_pin=33

#Abilita il PWM sulle linee 40 e 41 usate per l'audio out
dtoverlay=pwm-2chan,pin=40,func=4,pin2=41,func2=4

#Abilita il ricevitore IR
dtoverlay=gpio-ir,gpio_pin=20,gpio_pull=off

cmdline.txt

Cambiare

console=serial0,115200

in

console=serial1,115200

Comandi utili per la seriale

stty -F /dev/ttyACM0 115200
echo "Ciao" > /dev/ttyACM0

Log per vedere se sono stati caricati gli overlay

vcdbg log msg

Relay

  • RL1 (left) GPIO21
  • RL2 (right) GPIO22

Script di prova:

echo 21 > /sys/class/gpio/export
echo 22 > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio21/direction                                   
echo "out" > /sys/class/gpio/gpio22/direction                                   

for i in {1..5}
do
    echo "0" > /sys/class/gpio/gpio21/value                                         
    echo "1" > /sys/class/gpio/gpio22/value                                
    sleep 1

    echo "1" > /sys/class/gpio/gpio21/value                                         
    echo "0" > /sys/class/gpio/gpio22/value                                
    sleep 1
done
echo 21 > /sys/class/gpio/unexport
echo 22 > /sys/class/gpio/unexport

Schemi

Datasheet

Overlay

Link utili

Sergio Tanzilli (Autore - Progettista hw & sw - Imprenditore - Musicista dilettante, classe 1964)
Fondatore di Area SX srl, Acme Systems srl e del TanzoLab, si occupa dal 1974 di elettronica digitale, dal 1978 di microprocessori, dal 1992 di microcontroller, dal 1995 di Linux e pubblicazioni su Web, dal 2005 di progettazione, produzione e commercializzazione di schede Linux Embedded.
http://www.tanzilli.com - http://www.acmesystems.it - https://github.com/tanzilli - sergio@tanzilli.com

The TanzoLab Project

Il TanzoLab è una iniziativa senza fini di lucro, nata da un'idea di Sergio Tanzilli socio fondatore di Acme Systems srl nel Novembre 2015, per trasferire ad appassionati di elettronica e informatica, professionisti e aziende nel settore, le conoscenze necessarie per poter creare prodotti embedded adatti per la produzione industriale.

Le attività del TanzoLab si svolgono ogni mercoledi sera, salvo casi speciali, dalle ore 18:30 presso i locali della Acme Systems srl e consistono in:

  • Talk monotematici a cura di professionisti in vari settori tecnologici
  • Workshop pratici su elettronica embedded, produzione e informatica
  • Progettazione e realizzazione di nuovi prodotti embedded per l'IT

Le attività vengono coordinate tramite questo sito, in cui vengono pubblicati tutti i lavori svolti o in via di sviluppo, e tramite un gruppo Telegram con cui per interagire direttamente via chat con gli altri membri.