Electrical – I2C slave compatible with SMBus protocol

i2cprotocolsmbus

I do have some inquiries regarding using an I2C slave controller (from Arria 10 FPGA).

We are currently assessing MCTP protocol support in our device, whose physical layer is built upon SMBus/I2C, according to MCTP specs. Our starting point would be to use the built-in I2C controller in our fixed processor inside the fpga. Our device would only act as I2C slaves meaning it doesn’t initiate any communication.

I understand that SMBus and I2C have mostly similarities in electrical signal level, except on speeds (SMBus is only up until 100KHz clock, while I2C supports higher clocks; but anyway we are just after basic implementation at 100KHz clock so this is not a concern). However, later on the MCTP specs, it describes the MCTP behavior only in terms of SMBus protocol, like SMBus block write which I don't see exact equivalent protocol in I2C. It also recommended using ARP, which I think is not specified in I2C and only in SMBus. So I'm expecting that the MCTP host will be sending me, the device, commands in terms of SMBus protocol. Now if we have an SMBus controller in Arria 10 this won't be a problem, but we only have I2C, and I'm not sure whether our I2C "slave" controller will understand SMBus protocol. I've tried to research online but I'm getting conflicting views. I've also asked Altera but still waiting for their reply. What I kept on reading is that "SMBus is a subset of I2C".

I'm mostly concerned about multi-byte transactions (block write, read, multi-byte write, whatever their names are), since the host will be sending packets and I will be replying with certain number of data bytes. Will our I2C controller work with SMBus protocol? Let me know what you think.

Best Answer

That depends on how much of I2C protocol is implemented in your Arria controller. If it is just reporting the "events" to the program (like "STOP detected", "START detected", "ACK received", "Address received", etc.), then most probably you will be able to implement most of the SMBus, except for maybe ARP which requires, AFAIR, responding to a broadcast address (which your controller may not have support for). The other concern is timeouts. SMBus have stricter timeouts, especially in regard to clock stretching. Compatibility would highly depend on the extent to which the master uses the SMBus protocol and expects conformance.

On the other hand, if your Arria provides a higher level abstraction (like "Send I2C byte"), then it most probably will be a show-stopper.

If you have any evaluation board for your Arria 10 FPGA, I would recommend testing the concept using that board before you go with this chip for design and production.

Related Topic