@@ -177,10 +177,13 @@ i2c_err_t i2cWrite(i2c_t * i2c, uint16_t address, bool addr_10bit, uint8_t * dat
177177
178178 //CMD WRITE(ADDRESS + DATA)
179179 if (!index ) {
180- i2c -> dev -> fifo_data .data = address & 0xFF ;
181- dataSend -- ;
182- if (addr_10bit ) {
183- i2c -> dev -> fifo_data .data = (address >> 8 ) & 0xFF ;
180+ if (addr_10bit ){// address is leftshifted with Read/Write bit set
181+ i2c -> dev -> fifo_data .data = (((address >> 8 ) & 0x6 ) | 0xF0 ); // send a9:a8 plus 1111 0xxW mask
182+ i2c -> dev -> fifo_data .data = ((address >> 1 ) & 0xFF ); // send a7:a0, remove W bit (7bit address style)
183+ dataSend -= 2 ;
184+ }
185+ else { // 7bit address
186+ i2c -> dev -> fifo_data .data = address & 0xFF ;
184187 dataSend -- ;
185188 }
186189 }
@@ -286,9 +289,12 @@ i2c_err_t i2cRead(i2c_t * i2c, uint16_t address, bool addr_10bit, uint8_t * data
286289 i2cSetCmd (i2c , cmdIdx ++ , I2C_CMD_RSTART , 0 , false, false, false);
287290
288291 //CMD WRITE ADDRESS
289- i2c -> dev -> fifo_data .val = address & 0xFF ;
290- if (addr_10bit ) {
291- i2c -> dev -> fifo_data .val = (address >> 8 ) & 0xFF ;
292+ if (addr_10bit ) { // address is left-shifted with Read/Write bit set
293+ i2c -> dev -> fifo_data .data = (((address >> 8 ) & 0x6 ) | 0xF1 ); // send a9:a8 plus 1111 0xxR mask
294+ i2c -> dev -> fifo_data .data = ((address >> 1 ) & 0xFF ); // send a7:a0, remove R bit (7bit address style)
295+ }
296+ else { // 7bit address
297+ i2c -> dev -> fifo_data .data = address & 0xFF ;
292298 }
293299 i2cSetCmd (i2c , cmdIdx ++ , I2C_CMD_WRITE , addrLen , false, false, true);
294300 nextCmdCount = cmdIdx ;
0 commit comments