@@ -183,7 +183,7 @@ STATIC int mp_hal_i2c_write_addresses(machine_i2c_obj_t *self, uint8_t addr,
183183}
184184
185185STATIC void mp_hal_i2c_write_mem (machine_i2c_obj_t * self , uint8_t addr ,
186- uint32_t memaddr , uint8_t addrsize , const uint8_t * src , size_t len ) {
186+ uint32_t memaddr , uint8_t addrsize , const uint8_t * src , size_t len , bool stop ) {
187187 // start the I2C transaction
188188 if (!mp_hal_i2c_start (self )) {
189189 goto er ;
@@ -202,7 +202,7 @@ STATIC void mp_hal_i2c_write_mem(machine_i2c_obj_t *self, uint8_t addr,
202202 }
203203
204204 // finish the I2C transaction
205- if (!mp_hal_i2c_stop (self )) {
205+ if (stop && !mp_hal_i2c_stop (self )) {
206206 goto er ;
207207 }
208208 return ;
@@ -213,7 +213,7 @@ STATIC void mp_hal_i2c_write_mem(machine_i2c_obj_t *self, uint8_t addr,
213213}
214214
215215STATIC void mp_hal_i2c_read_mem (machine_i2c_obj_t * self , uint8_t addr ,
216- uint32_t memaddr , uint8_t addrsize , uint8_t * dest , size_t len ) {
216+ uint32_t memaddr , uint8_t addrsize , uint8_t * dest , size_t len , bool stop ) {
217217 // start the I2C transaction
218218 if (!mp_hal_i2c_start (self )) {
219219 goto er ;
@@ -239,7 +239,7 @@ STATIC void mp_hal_i2c_read_mem(machine_i2c_obj_t *self, uint8_t addr,
239239 goto er ;
240240 }
241241 }
242- if (!mp_hal_i2c_stop (self )) {
242+ if (stop && !mp_hal_i2c_stop (self )) {
243243 goto er ;
244244 }
245245 return ;
@@ -249,12 +249,12 @@ STATIC void mp_hal_i2c_read_mem(machine_i2c_obj_t *self, uint8_t addr,
249249 nlr_raise (mp_obj_new_exception_msg (& mp_type_OSError , "I2C bus error" ));
250250}
251251
252- STATIC void mp_hal_i2c_write (machine_i2c_obj_t * self , uint8_t addr , const uint8_t * src , size_t len ) {
253- mp_hal_i2c_write_mem (self , addr , 0 , 0 , src , len );
252+ STATIC void mp_hal_i2c_write (machine_i2c_obj_t * self , uint8_t addr , const uint8_t * src , size_t len , bool stop ) {
253+ mp_hal_i2c_write_mem (self , addr , 0 , 0 , src , len , stop );
254254}
255255
256- STATIC void mp_hal_i2c_read (machine_i2c_obj_t * self , uint8_t addr , uint8_t * dest , size_t len ) {
257- mp_hal_i2c_read_mem (self , addr , 0 , 0 , dest , len );
256+ STATIC void mp_hal_i2c_read (machine_i2c_obj_t * self , uint8_t addr , uint8_t * dest , size_t len , bool stop ) {
257+ mp_hal_i2c_read_mem (self , addr , 0 , 0 , dest , len , stop );
258258}
259259
260260/******************************************************************************/
@@ -428,8 +428,9 @@ STATIC mp_obj_t machine_i2c_readfrom_mem(size_t n_args, const mp_obj_t *pos_args
428428 vstr_init_len (& vstr , mp_obj_get_int (args [ARG_n ].u_obj ));
429429
430430 // do the transfer
431+
431432 mp_hal_i2c_read_mem (self , args [ARG_addr ].u_int , args [ARG_memaddr ].u_int ,
432- args [ARG_addrsize ].u_int , (uint8_t * )vstr .buf , vstr .len );
433+ args [ARG_addrsize ].u_int , (uint8_t * )vstr .buf , vstr .len , true );
433434 return mp_obj_new_str_from_vstr (& mp_type_bytes , & vstr );
434435}
435436MP_DEFINE_CONST_FUN_OBJ_KW (machine_i2c_readfrom_mem_obj , 1 , machine_i2c_readfrom_mem );
@@ -448,7 +449,7 @@ STATIC mp_obj_t machine_i2c_readfrom_mem_into(size_t n_args, const mp_obj_t *pos
448449
449450 // do the transfer
450451 mp_hal_i2c_read_mem (self , args [ARG_addr ].u_int , args [ARG_memaddr ].u_int ,
451- args [ARG_addrsize ].u_int , bufinfo .buf , bufinfo .len );
452+ args [ARG_addrsize ].u_int , bufinfo .buf , bufinfo .len , true );
452453 return mp_const_none ;
453454}
454455MP_DEFINE_CONST_FUN_OBJ_KW (machine_i2c_readfrom_mem_into_obj , 1 , machine_i2c_readfrom_mem_into );
@@ -466,7 +467,7 @@ STATIC mp_obj_t machine_i2c_writeto_mem(size_t n_args, const mp_obj_t *pos_args,
466467
467468 // do the transfer
468469 mp_hal_i2c_write_mem (self , args [ARG_addr ].u_int , args [ARG_memaddr ].u_int ,
469- args [ARG_addrsize ].u_int , bufinfo .buf , bufinfo .len );
470+ args [ARG_addrsize ].u_int , bufinfo .buf , bufinfo .len , true );
470471 return mp_const_none ;
471472}
472473STATIC MP_DEFINE_CONST_FUN_OBJ_KW (machine_i2c_writeto_mem_obj , 1 , machine_i2c_writeto_mem );
@@ -532,13 +533,13 @@ int mp_machine_soft_i2c_write(mp_obj_base_t *self_in, const uint8_t *src, size_t
532533
533534int mp_machine_soft_i2c_readfrom (mp_obj_base_t * self_in , uint16_t addr , uint8_t * dest , size_t len , bool stop ) {
534535 machine_i2c_obj_t * self = (machine_i2c_obj_t * )self_in ;
535- mp_hal_i2c_read (self , addr , dest , len );
536+ mp_hal_i2c_read (self , addr , dest , len , stop );
536537 return 0 ; // success
537538}
538539
539540int mp_machine_soft_i2c_writeto (mp_obj_base_t * self_in , uint16_t addr , const uint8_t * src , size_t len , bool stop ) {
540541 machine_i2c_obj_t * self = (machine_i2c_obj_t * )self_in ;
541- mp_hal_i2c_write (self , addr , src , len );
542+ mp_hal_i2c_write (self , addr , src , len , stop );
542543 return 0 ; // success
543544}
544545
0 commit comments