@@ -177,10 +177,13 @@ i2c_err_t i2cWrite(i2c_t * i2c, uint16_t address, bool addr_10bit, uint8_t * dat
177
177
178
178
//CMD WRITE(ADDRESS + DATA)
179
179
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 ;
184
187
dataSend -- ;
185
188
}
186
189
}
@@ -286,9 +289,12 @@ i2c_err_t i2cRead(i2c_t * i2c, uint16_t address, bool addr_10bit, uint8_t * data
286
289
i2cSetCmd (i2c , cmdIdx ++ , I2C_CMD_RSTART , 0 , false, false, false);
287
290
288
291
//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 ;
292
298
}
293
299
i2cSetCmd (i2c , cmdIdx ++ , I2C_CMD_WRITE , addrLen , false, false, true);
294
300
nextCmdCount = cmdIdx ;
0 commit comments