@@ -760,12 +760,14 @@ STATIC mp_obj_t pyb_i2c_send(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_
760760 if (!use_dma ) {
761761 status = HAL_I2C_Master_Transmit (self -> i2c , i2c_addr , bufinfo .buf , bufinfo .len , args [2 ].u_int );
762762 } else {
763+ MP_HAL_CLEAN_DCACHE (bufinfo .buf , bufinfo .len );
763764 status = HAL_I2C_Master_Transmit_DMA (self -> i2c , i2c_addr , bufinfo .buf , bufinfo .len );
764765 }
765766 } else {
766767 if (!use_dma ) {
767768 status = HAL_I2C_Slave_Transmit (self -> i2c , bufinfo .buf , bufinfo .len , args [2 ].u_int );
768769 } else {
770+ MP_HAL_CLEAN_DCACHE (bufinfo .buf , bufinfo .len );
769771 status = HAL_I2C_Slave_Transmit_DMA (self -> i2c , bufinfo .buf , bufinfo .len );
770772 }
771773 }
@@ -834,12 +836,14 @@ STATIC mp_obj_t pyb_i2c_recv(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_
834836 if (!use_dma ) {
835837 status = HAL_I2C_Master_Receive (self -> i2c , i2c_addr , (uint8_t * )vstr .buf , vstr .len , args [2 ].u_int );
836838 } else {
839+ MP_HAL_CLEANINVALIDATE_DCACHE (vstr .buf , vstr .len );
837840 status = HAL_I2C_Master_Receive_DMA (self -> i2c , i2c_addr , (uint8_t * )vstr .buf , vstr .len );
838841 }
839842 } else {
840843 if (!use_dma ) {
841844 status = HAL_I2C_Slave_Receive (self -> i2c , (uint8_t * )vstr .buf , vstr .len , args [2 ].u_int );
842845 } else {
846+ MP_HAL_CLEANINVALIDATE_DCACHE (vstr .buf , vstr .len );
843847 status = HAL_I2C_Slave_Receive_DMA (self -> i2c , (uint8_t * )vstr .buf , vstr .len );
844848 }
845849 }
@@ -920,6 +924,7 @@ STATIC mp_obj_t pyb_i2c_mem_read(mp_uint_t n_args, const mp_obj_t *pos_args, mp_
920924 dma_init (& rx_dma , self -> rx_dma_descr , self -> i2c );
921925 self -> i2c -> hdmatx = NULL ;
922926 self -> i2c -> hdmarx = & rx_dma ;
927+ MP_HAL_CLEANINVALIDATE_DCACHE (vstr .buf , vstr .len );
923928 status = HAL_I2C_Mem_Read_DMA (self -> i2c , i2c_addr , mem_addr , mem_addr_size , (uint8_t * )vstr .buf , vstr .len );
924929 if (status == HAL_OK ) {
925930 status = i2c_wait_dma_finished (self -> i2c , args [3 ].u_int );
@@ -988,6 +993,7 @@ STATIC mp_obj_t pyb_i2c_mem_write(mp_uint_t n_args, const mp_obj_t *pos_args, mp
988993 dma_init (& tx_dma , self -> tx_dma_descr , self -> i2c );
989994 self -> i2c -> hdmatx = & tx_dma ;
990995 self -> i2c -> hdmarx = NULL ;
996+ MP_HAL_CLEAN_DCACHE (bufinfo .buf , bufinfo .len );
991997 status = HAL_I2C_Mem_Write_DMA (self -> i2c , i2c_addr , mem_addr , mem_addr_size , bufinfo .buf , bufinfo .len );
992998 if (status == HAL_OK ) {
993999 status = i2c_wait_dma_finished (self -> i2c , args [3 ].u_int );
0 commit comments