Siga las actualizaciones en Twitter: https://twitter.com/mistertechblog/status/14542004999247349760
La placa posterior de Lora para pinephone consta de ...
Semtech SX1262 Lora Transceptor (SPI) y antena
https://www.semtech.com/products/wireless-rf/lora-core/sx1262
Conector I2C que coincide con el puerto I2C (Pogo Pins) en PinePhone
https://wiki.pine64.org/index.php/pinephone#pogo_pins
Puente I2C a SPI (Attiny84) que conecta el conector I2C al transceptor Lora (SPI)
https://github.com/zschroeder6212/tiny-i2cspi
Esquema: https://wiki.pine64.org/wiki/pinedio#pinephone_backplate
Probemos la placa posterior de Lora con un pirata de bus, para transmitir algunos comandos SX1262 y leamos las respuestas: http://dangerousprototypes.com/docs/i2c
ACTUALIZACIÓN: Vea estos excelentes artículos de JF ...
"Primero mire la placa posterior de Lora para el pinephone"
"Faltar la placa posterior de Lora para el pinephone"
"Un conductor para la placa posterior de Lora para el pinephone"
Código fuente de Arduino: https://github.com/zschroeder6212/tiny-i2cspi/blob/master/src/main.c
El puente funciona en la dirección 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 ;El puente transmite datos a SPI cuando el primer byte recibido es 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 ;Cuando el puente recibe un comando de lectura, devuelve los bytes recibidos de SPI:
void I2C_requested ()
{
usiTwiTransmitByte ( SPI_buffer [ transmit_index ++ ]);
if ( transmit_index >= BUFFER_SIZE )
{
transmit_index = 0 ;
}
} Las funciones usi se definen aquí: https://github.com/zschroeder6212/tiny-i2cspi/blob/master/src/usi_twi_slave.c
Residencia en:
http://dangerousprototypes.com/docs/i2c
https://lupyuen.github.io/articles/i2c#appendix-test-bme280-with-bus pirate
Conecte el pirata de bus de bus a la placa posterior de Lora:
| Pasador pirata de bus | Alfiler |
|---|---|
MOSI | SDA |
CLK | SCL |
5V | USB-5V |
GND | GND |
Ingrese el modo I2C, encendido:
m
I2C > HW > 400
W
Escanear el bus I2C:
(1)
Resultados de la exploración I2C:
Searching I2C address space. Found devices at:
0x00 (0x00 W) 0x01 (0x00
o
Searching I2C address space. Found devices at:
0x40(0x20 W) 0x41(0x20
Problema: el pirata de autobuses cuelga mientras escanea. Y la dirección I2C de la placa posterior de Lora debe ser 0x28, no 0x00. ¿Por qué?
Lea la dirección I2C 0x28:
[0x51 r]
(Porque 0x51 = 0x28 * 2 + 1)
Resultado:
I2C START BIT
WRITE: 0x51 ACK
READ: 0x00
NACK
Problema: el pirata de bus se cuelga mientras lee la dirección I2C 0x28 de la placa posterior de Lora. ¿Por qué?
Lea la dirección I2C 0x20:
[0x41 r]
(Porque 0x41 = 0x20 * 2 + 1)
Mismo problema que el anterior.
Lea la dirección I2C 0x00:
[0x01 r]
(Porque 0x01 = 0x00 * 2 + 1)
Mismo problema que el anterior.
Lo mismo sucede cuando sondeamos el tablero de ruptura para la placa posterior de Lora ...
TODO: Escriba y lea la dirección I2C 0x28 Registrarse 0x01:
[0x50 0x01 0x00] [0x51 r]
TODO: Escriba y lea la dirección I2C 0x00 Registrarse 0x01?
[0x00 0x01 0x00] [0x01 r]
En pinephone con Manjaro Phosh, escaneando el bus I2C 3 con 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: -- -- -- -- -- -- -- -- Problema: i2cdetect no puede detectar la dirección I2C (0x28) de la placa posterior de Lora. ¿Por qué?
¿Se ha flotado la placa posterior de Lora con el firmware adecuado?
Puente I2C-To-SPI en Attiny84: https://github.com/zschroeder6212/tiny-i2c-spi
Lora placa posterior (dirección I2C 0x28) no aparece cuando escaneamos los buses I2C 0 a 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: -- -- -- -- -- -- -- --(No, no puede ser I2C Bus 2 porque esperamos un autobús completo dedicado a los Pins I2C Pogo)
Compare esto con otros dispositivos PinePhone I2C:
https://github.com/jnavarro7/pineeye_for_pinephone
https://dev.to/pcvonz/ic-on-the-pinephone-5090
ACTUALIZACIÓN: Vea estos excelentes artículos de JF ...
"Primero mire la placa posterior de Lora para el pinephone"
"Faltar la placa posterior de Lora para el pinephone"
"Un conductor para la placa posterior de Lora para el pinephone"