I2C transaction breaks I2c trait contract
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- linux, rust
Línea de trabajo
Comienza por la implementación de I2cdev::transaction y sigue la ruta de operación de Linux I2C que utiliza el ejemplo proporcionado. Compara la secuencia de bus generada con el contrato de la transacción, especialmente en el caso de operaciones Write adyacentes. Se considera terminado cuando el ejemplo ya no produce un repeated start ni una dirección innecesarios entre escrituras consecutivas y el comportamiento relevante está cubierto por pruebas, si la implementación expone una ruta comprobable.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
According to I2c trait transaction contract is as follows:
Transaction contract:
- Before executing the first operation an ST is sent automatically. This is followed by SAD+R/W as appropriate.
- Data from adjacent operations of the same type are sent after each other without an SP or SR.
- Between adjacent operations of a different type an SR and SAD+R/W is sent.
- After executing the last operation an SP is sent automatically.
- If the last operation is a `Read` the master does not send an acknowledge for the last byte.
- `ST` = start condition
- `SAD+R/W` = slave address followed by bit 1 to indicate reading or 0 to indicate writing
- `SR` = repeated start condition
- `SP` = stop condition
Using following simple test code:
use embedded_hal::i2c::blocking::{I2c, Operation as I2cOperation};
use linux_embedded_hal::I2cdev;
fn main() {
let mut i2c_dev = I2cdev::new("/dev/i2c-1").unwrap();
let data = [0xaa; 1];
let mut ops = [I2cOperation::Write(&[0x40]), I2cOperation::Write(&data)];
i2c_dev.transaction(0x3d, &mut ops).unwrap();
}
I'm expecting no SR "repeated start condition" to appear as both operations are of the same type (Write). Unfortunately I can see SR "repeated start condition" on the bus as well as SAD+R/W "slave address followed by bit 1 to indicate reading or 0 to indicate writing" (positions 6 and 8). This was captured using logic analyzer on embedded Linux board for the sample code attached above:

- Lenguaje dominante
- Rust
- Estrellas
- 319
- Forks
- 60
- Merge medio
- 12 h 31 min
- PR fusionados (30 d)
- 1
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de rust-embedded/linux-embedded-hal
-
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
rust-embedded/linux-embedded-hal#121 · 4 comentarios ·
-
[feature request] PWM support Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
rust-embedded/linux-embedded-hal#117 · 3 reacciones ·
-
How to use SPI with gpio_cdev Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
rust-embedded/linux-embedded-hal#116 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
Todos los issues de rust-embedded/linux-embedded-hal
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
TheLarkInn/aipm#2413 ·
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
alexgorbatchev/simple-ptt#15 ·
-
tooling
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
todo:ticket
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
taikoxyz/taiko-mono#22168 · 1 comentario ·