0

I'm currently trying to setup a unidirectional I2C bus (only for the SDA, master talking to slave only, the ACK bit would be ignored) between a BeagleBone Black (running debian) and a slave. I know there are other buses available where it would be easier but it has to be I2C.

I can talk between my 2 devices with the usual SDA (read and write) with no trouble. I tried using a diode and I can't get any communication going this way (running my code gives me the following error : IOError: [Errno 121] Remote I/O error). I don't know what's causing the error, maybe not being able to detect the slave on the bus because of the diode ?

I'm using the smbus python library (https://fossies.org/dox/i2c-tools-3.1.2/smbusmodule_8c_source.html). Looking at the source of the IOerror (when executing write_byte), I see a call made to the i2c_core driver.

My question is the following : how can I write from my master to my slave and have it not expect an ACK bit (if that's the cause of the problem), or allow it to write in the setup I have described ? (with a diode on the SDA line, I didn't take into account the forward voltage drop yet as I believe it's only software related atm).

Do I need to modify the driver ?

JB430
  • 21
  • 2
  • Works as expected? What do you think should happen when master doesn't get a reply from slave? Use a scope or logical analyser to confirm on-the-wire values. – domen Sep 21 '16 at 12:14
  • @domen : Can't it just write regardless of the reply ? I know there is an I2C mode that uses a unidirectionnal SDA (http://www.i2c-bus.org/ultra-fast-mode-ufm/). it's not supported on my devices so I'd like to know if I can set it up myself (not the mode, just the simplex line). Haven't got a scope near me atm, I'll check when I have one – JB430 Sep 21 '16 at 12:25
  • It's tricky, since (I assume all this) it sends address, but because there's no ACK, so it won't continue and send the data. Interesting decision to do this with I2C; SPI or UART would make this much easier. – domen Sep 21 '16 at 13:23

0 Answers0