diff --git a/module06/ex01/main.c b/module06/ex01/main.c index f5693ec..3cd355d 100644 --- a/module06/ex01/main.c +++ b/module06/ex01/main.c @@ -324,6 +324,61 @@ send stop : 1011000 after stop : 11111000 */ +/* +init i2c : 11111000 TW_NO_INFO -> No state information available + after init : 11111000 TW_NO_INFO -> No state information available + +start transmission : 11111000 TW_NO_INFO -> No state information available + after start : 1000 TW_START -> Start condition transmitted + +send SLA+W : 1000 TW_START -> Start condition transmitted + after SLA+W : 11000 TW_MT_SLA_ACK -> SLA+W transmitted, ACK received + +send 0xAC (trigger measurement) : 11000 TW_MT_SLA_ACK -> SLA+W transmitted, ACK received + after 0xAC : 101000 TW_MT_DATA_ACK -> Data transmitted, ACK received +send parameter 1st byte 0x33 : 101000 TW_MT_DATA_ACK -> Data transmitted, ACK received + after 0x33 : 101000 TW_MT_DATA_ACK -> Data transmitted, ACK received +send parameter 2nd byte 0x00 : 101000 TW_MT_DATA_ACK -> Data transmitted, ACK received + after 0x00 : 101000 TW_MT_DATA_ACK -> Data transmitted, ACK received + +send repeat start : 101000 TW_MT_DATA_ACK -> Data transmitted, ACK received + after repeat start : 10000 TW_REP_START -> Repeated start condition transmitted + +send SLA+R : 10000 TW_REP_START -> Repeated start condition transmitted + after SLA+R : 1000000 TW_MR_SLA_ACK -> SLA+R transmitted, ACK received + +read 1 data : 1000000 TW_MR_SLA_ACK -> SLA+R transmitted, ACK received + after read : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned +152 +read 2 data : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned + after read : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned +196 +read 3 data : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned + after read : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned +182 +read 4 data : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned + after read : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned +213 +read 5 data : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned + after read : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned +255 +read 6 data : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned + after read : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned +212 +read 7 data : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned + after read : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned +164 +read 8 data : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned + after read : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned +255 +read 9 data : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned + after read : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned +255 + +send stop : 1011000 TW_MR_DATA_NACK -> Data received, NACK returned + after stop : 11111000 TW_NO_INFO -> No state information available +*/ + // status codes : // -- Master -- // TW_BUS_ERROR 0x00 = 0b0 = 0 -> illegal start or stop condition @@ -347,7 +402,11 @@ send stop : 1011000 #define SLAVE_ADDRESS 0x38 // doc AHT20, 7.3 : address of thermistor : 0b111000, 56 -void print_hex_value(char c) {} +void print_hex_value(char c) { + char buffer[3] = {0}; + int_to_hex_string(c, buffer, 2); + uart_printstr(buffer); +} void print_status_meaning(uint16_t status) { switch (status) { @@ -371,6 +430,7 @@ void print_status_meaning(uint16_t status) { } void print_status(char *str) { + return; uint8_t status; status = TWSR & 0b11111000; // Table 22-2. Status codes for Master Transmitter Mode uint16_t size = 53; @@ -450,72 +510,18 @@ int main() { print_status("\r\nsend SLA+R"); i2c_send_addr_r(SLAVE_ADDRESS); print_status(" after SLA+R"); - - // print_status("\r\nstatus ? 0"); - // _delay_ms(10); - // print_status("status ? 10"); - // _delay_ms(10); - // print_status("status ? 20"); - // _delay_ms(10); - // print_status("status ? 30"); - // _delay_ms(10); - // print_status("status ? 40"); - // _delay_ms(10); - // print_status("status ? 50"); - // _delay_ms(10); - // print_status("status ? 60"); - // _delay_ms(10); - // print_status("status ? 70"); - // _delay_ms(10); - // print_status("status ? 80"); - // _delay_ms(10); - // print_status("status ? 90"); - // _delay_ms(10); - // print_status("status ? 100"); - // _delay_ms(10); - // print_status("status ? 110"); - // _delay_ms(10); - // print_status("status ? 120"); - // _delay_ms(10); - // print_status("status ? 130"); - +; + print_status("\r\nbefore read data"); uint8_t data; - print_status("\r\nread 1 data"); - data = i2c_read(); - print_status(" after read"); - uart_printstr_itoa_base_endl(data, 10); - print_status("read 2 data"); - data = i2c_read(); - print_status(" after read"); - uart_printstr_itoa_base_endl(data, 10); - print_status("read 3 data"); - data = i2c_read(); - print_status(" after read"); - uart_printstr_itoa_base_endl(data, 10); - print_status("read 4 data"); - data = i2c_read(); - print_status(" after read"); - uart_printstr_itoa_base_endl(data, 10); - print_status("read 5 data"); - data = i2c_read(); - print_status(" after read"); - uart_printstr_itoa_base_endl(data, 10); - print_status("read 6 data"); - data = i2c_read(); - print_status(" after read"); - uart_printstr_itoa_base_endl(data, 10); - print_status("read 7 data"); - data = i2c_read(); - print_status(" after read"); - uart_printstr_itoa_base_endl(data, 10); - print_status("read 8 data"); - data = i2c_read(); - print_status(" after read"); - uart_printstr_itoa_base_endl(data, 10); - print_status("read 9 data"); - data = i2c_read(); - print_status(" after read"); - uart_printstr_itoa_base_endl(data, 10); + for (uint8_t i = 0; i < 10; i++) { + data = i2c_read(); + print_hex_value(data); + if (i < 9) { + uart_tx(' '); + } + } + uart_printstr_endl(""); + print_status(" after read data"); print_status("\r\nsend stop"); i2c_stop();