@@ -84,8 +84,10 @@ def deinit(self):
84
84
85
85
# pylint: enable=no-self-use
86
86
87
+
87
88
class I2C (_BitBangIO ):
88
89
"""Software-based implementation of the I2C protocol over GPIO pins."""
90
+
89
91
def __init__ (self , scl , sda , * , frequency = 400000 , timeout = 1 ):
90
92
"""Initialize bitbang (or software) based I2C. Must provide the I2C
91
93
clock, and data pin numbers.
@@ -132,13 +134,14 @@ def readfrom_into(self, address, buffer, *, start=0, end=None):
132
134
def writeto_then_readfrom (
133
135
self ,
134
136
address ,
135
- out_buffer ,
136
- in_buffer ,
137
+ buffer_out ,
138
+ buffer_in ,
137
139
* ,
138
140
out_start = 0 ,
139
141
out_end = None ,
140
142
in_start = 0 ,
141
- in_end = None
143
+ in_end = None ,
144
+ stop = True
142
145
):
143
146
"""Write data from buffer_out to an address and then
144
147
read data from an address and into buffer_in
@@ -159,7 +162,7 @@ def _sda_low(self):
159
162
def _scl_release (self ):
160
163
"""Release and let the pullups lift"""
161
164
self ._scl .value = 1
162
-
165
+
163
166
def _sda_release (self ):
164
167
"""Release and let the pullups lift"""
165
168
self ._sda .value = 1
@@ -238,7 +241,7 @@ def _read_byte(self, ack=False):
238
241
self ._scl_low ()
239
242
sleep (self ._delay )
240
243
self ._sda .switch_to_output ()
241
-
244
+
242
245
if ack :
243
246
self ._sda_low ()
244
247
else :
@@ -247,13 +250,13 @@ def _read_byte(self, ack=False):
247
250
self ._scl_release ()
248
251
sleep (self ._delay )
249
252
return data & 0xFF
250
-
253
+
251
254
def _probe (self , address ):
252
255
self ._start ()
253
256
ok = self ._write_byte (address << 1 )
254
257
self ._stop ()
255
258
return ok > 0
256
-
259
+
257
260
def _write (self , address , buffer , transmit_stop ):
258
261
self ._start ()
259
262
if not self ._write_byte (address << 1 ):
@@ -262,7 +265,7 @@ def _write(self, address, buffer, transmit_stop):
262
265
self ._write_byte (byte )
263
266
if transmit_stop :
264
267
self ._stop ()
265
-
268
+
266
269
def _read (self , address , length ):
267
270
self ._start ()
268
271
if not self ._write_byte (address << 1 | 1 ):
@@ -272,10 +275,7 @@ def _read(self, address, length):
272
275
buffer [byte_position ] = self ._read_byte (ack = (byte_position != length - 1 ))
273
276
self ._stop ()
274
277
return buffer
275
-
276
- def _read_i2c_block_data (self , address , write_bytes , length ):
277
- """Untested"""
278
- pass
278
+
279
279
280
280
class SPI (_BitBangIO ):
281
281
"""Software-based implementation of the SPI protocol over GPIO pins."""
0 commit comments