ติดตามการอัปเดตบน Twitter: https://twitter.com/mistertechblog/status/1454200499247349760
LORA Backplate สำหรับ Pinephone ประกอบด้วย ...
Semtech SX1262 LORA Transceiver (SPI) และเสาอากาศ
https://www.semtech.com/products/wireless-rf/lora-core/sx1262
ตัวเชื่อมต่อ I2C ที่ตรงกับพอร์ต I2C (พิน pogo) บน Pinephone
https://wiki.pine64.org/index.php/pinephone#pogo_pins
I2C-to-SPI Bridge (ATTINY84) ที่เชื่อมต่อขั้วต่อ I2C กับตัวรับส่งสัญญาณ LORA (SPI)
https://github.com/zschroeder6212/tiny-i2c-spi
แผนผัง: https://wiki.pine64.org/wiki/pinedio#pinephone_backplate
ลองตรวจสอบแผ่นหลัง LORA ด้วย Bus Pirate เพื่อส่งคำสั่ง SX1262 และอ่านคำตอบ: http://dangerousprototypes.com/docs/i2c
อัปเดต: ดูบทความที่ยอดเยี่ยมเหล่านี้โดย JF ...
"ก่อนอื่นดูที่แผ่นรอง Lora สำหรับ Pinephone"
"กระพริบแผ่นหลัง Lora สำหรับ Pinephone"
"ไดรเวอร์สำหรับแผ่นหลัง Lora สำหรับ Pinephone"
ซอร์สโค้ด Arduino: https://github.com/zschroeder6212/tiny-i2c-spi/blob/master/src/main.c
สะพานทำงานที่ที่อยู่ 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 ;บริดจ์ส่งข้อมูลไปยัง SPI เมื่อไบต์แรกที่ได้รับคือ 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 ;เมื่อสะพานได้รับคำสั่งอ่านจะส่งคืนไบต์ที่ได้รับจาก SPI:
void I2C_requested ()
{
usiTwiTransmitByte ( SPI_buffer [ transmit_index ++ ]);
if ( transmit_index >= BUFFER_SIZE )
{
transmit_index = 0 ;
}
} ฟังก์ชั่น usi ถูกกำหนดไว้ที่นี่: https://github.com/zschroeder6212/tiny-i2c-spi/blob/master/src/usi_twi_slave.c
ขึ้นอยู่กับ:
http://dangerousprototypes.com/docs/i2c
https://lupyuen.github.io/articles/i2c#appendix-test-bme280-with-bus-pirate
เชื่อมต่อ Bus Pirate กับ Lora Backplate:
| พินโจรสลัดรถบัส | พินแผ่นรอง |
|---|---|
MOSI | SDA |
CLK | SCL |
5V | USB-5V |
GND | GND |
เข้าสู่โหมด I2C, Power on:
m
I2C > HW > 400
W
สแกนรถบัส I2C:
(1)
I2C สแกนผลลัพธ์:
Searching I2C address space. Found devices at:
0x00 (0x00 W) 0x01 (0x00
หรือ
Searching I2C address space. Found devices at:
0x40(0x20 W) 0x41(0x20
ปัญหา: รถบัสโจรสลัดแขวนในขณะที่สแกน และที่อยู่ I2C ของแผ่นรองหลัง Lora ควรเป็น 0x28 ไม่ใช่ 0x00 ทำไม
อ่านที่อยู่ i2c 0x28:
[0x51 r]
(เพราะ 0x51 = 0x28 * 2 + 1)
ผลลัพธ์:
I2C START BIT
WRITE: 0x51 ACK
READ: 0x00
NACK
ปัญหา: Bus Pirate Hangs ขณะอ่านที่อยู่ i2c 0x28 จาก Lora Backplate ทำไม
อ่านที่อยู่ i2c 0x20:
[0x41 r]
(เพราะ 0x41 = 0x20 * 2 + 1)
ปัญหาเดียวกันกับข้างต้น
อ่านที่อยู่ i2c 0x00:
[0x01 r]
(เพราะ 0x01 = 0x00 * 2 + 1)
ปัญหาเดียวกันกับข้างต้น
สิ่งเดียวกันเกิดขึ้นเมื่อเราตรวจสอบบอร์ดฝ่าวงล้อมสำหรับแผ่นหลัง Lora ...
TODO: เขียนและอ่านที่อยู่ i2c 0x28 ลงทะเบียน 0x01:
[0x50 0x01 0x00] [0x51 r]
TODO: เขียนและอ่านที่อยู่ i2c 0x00 ลงทะเบียน 0x01?
[0x00 0x01 0x00] [0x01 r]
บน Pinephone กับ Manjaro Phosh สแกน i2c Bus 3 ด้วย 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: -- -- -- -- -- -- -- -- ปัญหา: i2cdetect ล้มเหลวในการตรวจจับที่อยู่ I2C (0x28) ของแผ่นหลัง LORA ทำไม
แผ่นรองหลัง Lora ถูกกระพริบด้วยเฟิร์มแวร์ที่เหมาะสมหรือไม่?
I2C-to-spi Bridge บน Attiny84: https://github.com/zschroeder6212/tiny-i2c-spi
LORA Backplate (ที่อยู่ I2C 0x28) ไม่ปรากฏขึ้นเมื่อเราสแกนรถบัส 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: -- -- -- -- -- -- -- --(ไม่สามารถเป็น I2C Bus 2 ได้เพราะเราคาดหวังว่าจะมีรถบัสทั้งหมดที่อุทิศให้กับหมุด I2C Pogo)
เปรียบเทียบสิ่งนี้กับอุปกรณ์ Pinephone I2C อื่น ๆ :
https://github.com/jnavarro7/pineeeye_for_pinephone
https://dev.to/pcvonz/ic-on-the-pinephone-5090
อัปเดต: ดูบทความที่ยอดเยี่ยมเหล่านี้โดย JF ...
"ก่อนอื่นดูที่แผ่นรอง Lora สำหรับ Pinephone"
"กระพริบแผ่นหลัง Lora สำหรับ Pinephone"
"ไดรเวอร์สำหรับแผ่นหลัง Lora สำหรับ Pinephone"