Suivez les mises à jour sur Twitter: https://twitter.com/mistertechblog/status/1454200499247349760
La plaque arrière Lora pour Pinephone est constituée de ...
SEMTECH SX1262 LORA Transmetteur (SPI) et antenne
https://www.semtech.com/products/wireless-rf/lora-core/sx1262
Connecteur I2C qui correspond au port I2C (broches Pogo) sur Pinephone
https://wiki.pine64.org/index.php/pinephone#pogo_pins
Bridge I2C-à SPI (ATtiny84) qui relie le connecteur I2C à l'émetteur-récepteur LORA (SPI)
https://github.com/zschroeder6212/tiny-i2c-spi
Schéma: https://wiki.pine64.org/wiki/pinedio#pinephone_backplate
Sondons la plaque arrière LORA avec un pirate de bus, pour transmettre certaines commandes SX1262 et lire les réponses: http://dangousprototypes.com/docs/i2c
MISE À JOUR: Voir ces excellents articles de JF ...
"Tout d'abord, regardez la plaque arrière Lora pour le pinphone"
"Clignotant la plaque arrière Lora pour le pinphone"
"Un pilote pour la plaque arrière LORA pour le Pinephone"
Arduino Code source: https://github.com/zschroeder6212/tiny-i2c-spi/blob/master/src/main.c
Le pont fonctionne à l'adresse I2C 0x28:
#include "USI_TWI_Slave.h"
#define I2C_ADDR 0x28
int main ( void )
{
/* init I2C */
usiTwiSlaveInit ( I2C_ADDR );
/* set received/requested callbacks */
usi_onReceiverPtr = I2C_received ;
usi_onRequestPtr = I2C_requested ;Le pont transmet des données à SPI lorsque le premier octet reçu est 0x01:
#define CMD_TRANSMIT 1
#define CMD_CONFIGURE 2
void I2C_received ( uint8_t bytes_recieved )
{
uint8_t command = usiTwiReceiveByte ();
switch ( command )
{
case CMD_TRANSMIT :
{
CS_PORT &= ~( 1 << CS );
for ( int i = 1 ; i < bytes_recieved ; i ++ )
{
uint8_t received_byte = SPI_transfer ( usiTwiReceiveByte ());
SPI_buffer [ received_index ++ ] = received_byte ;Lorsque le pont reçoit une commande de lecture, il renvoie les octets reçus de SPI:
void I2C_requested ()
{
usiTwiTransmitByte ( SPI_buffer [ transmit_index ++ ]);
if ( transmit_index >= BUFFER_SIZE )
{
transmit_index = 0 ;
}
} Les fonctions usi sont définies ici: https://github.com/zschroeder6212/tiny-i2c-spi/blob/master/src/usi_twi_slave.c
Basé sur:
http://dangereyprototypes.com/docs/i2c
https://lupyuen.github.io/articles/i2c#appendix-test-bme280-with-bus-pirate
Connectez le pirate de bus à la plaque arrière LORA:
| Broche de pirate de bus | Goupille de plaque arrière |
|---|---|
MOSI | SDA |
CLK | SCL |
5V | USB-5V |
GND | GND |
Entrez le mode I2C, puissance sur:
m
I2C > HW > 400
W
Bus de numérisation I2C:
(1)
Résultats du scan I2C:
Searching I2C address space. Found devices at:
0x00 (0x00 W) 0x01 (0x00
ou
Searching I2C address space. Found devices at:
0x40(0x20 W) 0x41(0x20
Problème: le pirate de bus est suspendu lors de la numérisation. Et l'adresse I2C de la plaque arrière LORA doit être 0x28, pas 0x00. Pourquoi?
Lire l'adresse I2C 0x28:
[0x51 r]
(Parce que 0x51 = 0x28 * 2 + 1)
Résultat:
I2C START BIT
WRITE: 0x51 ACK
READ: 0x00
NACK
Problème: le pirate de bus est suspendu lors de la lecture de l'adresse I2C 0x28 de la plaque arrière LORA. Pourquoi?
Lire l'adresse I2C 0x20:
[0x41 r]
(Parce que 0x41 = 0x20 * 2 + 1)
Même problème que ci-dessus.
Lire l'adresse I2C 0x00:
[0x01 r]
(Parce que 0x01 = 0x00 * 2 + 1)
Même problème que ci-dessus.
La même chose se produit lorsque nous sondons la planche de rupture pour la plaque arrière Lora ...
TODO: Écrivez et lisez l'adresse I2C 0x28 Registre 0x01:
[0x50 0x01 0x00] [0x51 r]
TODO: Écrivez et lisez l'adresse I2C 0x00 Registre 0x01?
[0x00 0x01 0x00] [0x01 r]
Sur Pinephone avec Manjaro Phosh, numérisant le bus I2C 3 avec i2cdetect :
[manjaro@manjaro-arm ~ ]$ sudo pacman -Syu i2c-tools
[manjaro@manjaro-arm ~ ]$ i2cdetect -l
i2c-0 unknown DesignWare HDMI N/A
i2c-1 unknown mv64xxx_i2c adapter N/A
i2c-2 unknown mv64xxx_i2c adapter N/A
i2c-3 unknown mv64xxx_i2c adapter N/A
i2c-4 unknown i2c-csi N/A
i2c-5 unknown i2c-2-mux (chan_id 0) N/A
[manjaro@manjaro-arm ~ ]$ sudo i2cdetect 3
WARNING ! This program can confuse your I2C bus, cause data loss and worse !
I will probe file /dev/i2c-3.
I will probe address range 0x08-0x77.
Continue ? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- Problème: i2cdetect ne parvient pas à détecter l'adresse I2C (0x28) de la plaque arrière LORA. Pourquoi?
La plaque arrière LORA a-t-elle été flassée avec le bon micrologiciel?
Bridge i2c-to-spi sur Attiny84: https://github.com/zschroeder6212/tiny-i2c-spi
Lora Backplate (adresse I2C 0x28) n'apparaît pas lorsque nous scannons les bus I2C 0 à 5:
[manjaro@manjaro-arm ~ ]$ sudo i2cdetect 0
WARNING ! This program can confuse your I2C bus, cause data loss and worse !
I will probe file /dev/i2c-0.
I will probe address range 0x08-0x77.
Continue ? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 -- 32 -- -- 35 -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
[manjaro@manjaro-arm ~ ]$ sudo i2cdetect 1
WARNING ! This program can confuse your I2C bus, cause data loss and worse !
I will probe file /dev/i2c-1.
I will probe address range 0x08-0x77.
Continue ? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- UU -- -- -- UU -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- UU -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
[manjaro@manjaro-arm ~ ]$ sudo i2cdetect 2
WARNING ! This program can confuse your I2C bus, cause data loss and worse !
I will probe file /dev/i2c-2.
I will probe address range 0x08-0x77.
Continue ? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- UU --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
[manjaro@manjaro-arm ~ ]$ sudo i2cdetect 3
WARNING ! This program can confuse your I2C bus, cause data loss and worse !
I will probe file /dev/i2c-3.
I will probe address range 0x08-0x77.
Continue ? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
[manjaro@manjaro-arm ~ ]$ sudo i2cdetect 4
WARNING ! This program can confuse your I2C bus, cause data loss and worse !
I will probe file /dev/i2c-4.
I will probe address range 0x08-0x77.
Continue ? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
[manjaro@manjaro-arm ~ ]$ sudo i2cdetect 5
WARNING ! This program can confuse your I2C bus, cause data loss and worse !
I will probe file /dev/i2c-5.
I will probe address range 0x08-0x77.
Continue ? [Y/n]
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- UU --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --(Non, ça ne peut pas être I2C Bus 2 parce que nous nous attendons à un bus entier dédié aux épingles Pogo I2C)
Comparez cela avec d'autres appareils Pinephone I2C:
https://github.com/jnavarro7/pineeye_for_pinephone
https://dev.to/pcvonz/ic-on-the-pinephone-5090
MISE À JOUR: Voir ces excellents articles de JF ...
"Tout d'abord, regardez la plaque arrière Lora pour le pinphone"
"Clignotant la plaque arrière Lora pour le pinphone"
"Un pilote pour la plaque arrière LORA pour le Pinephone"