Skip to content
Benjamin Vernoux edited this page Sep 25, 2016 · 50 revisions

#HydraFW Bus I2C (Inter-Integrated Circuit)

Bus: I2C (Inter-Integrated Circuit)
Connections: two pins (SDA/SCL) and ground
Output types: open drain/open collector
Pull-up resistors: pull-ups always required (2K - 10K ohms)
Pull-up/down resistors Integrated in MCU: Between 30 to 50K (Typical 40K).
Maximum voltage: 5.5volts (5volt safe)

I2C is a common 2-wire bus for low speed interfaces.

This guide is updated towards firmware release HydraFW v0.7 Beta: HydraFW (HydraBus) v0.7-beta-0-gc5567bd 2016-04-16

##Protocol configuration syntax description:

  • show Show I2C parameters or show pins Show pins used in this mode

  • pull with parameter up or down or floating to choose internal MCU pull up/down or no pull/external

  • frequency with floating frequency value (support k (for khz), m (for mhz) suffix or no suffix)

    • Frequencies available: 50khz, 100khz, 400khz, 1mhz
  • scan search I2C device(s) from address 0x01 to address 0x77

  • exit to exit I2C mode

Note default value: 
> i2c
GPIO resistor: pull-up
Frequency: 100khz (50khz, 400khz, 1mhz)

###Configuration options:

Hardware Informations:

i2c1> show pins
SCL: PB6
SDA: PB7

###Protocol configuration example:

Configuration of I2C1 400KHz(using internal MCU pull up):

> i2c
GPIO resistor: pull-up
Frequency: 100khz (50khz, 400khz, 1mhz)

i2c1> frequency 400khz show
GPIO resistor: pull-up
Frequency: 400khz (50khz, 100khz, 1mhz)

##Protocol interaction syntax description:

start or [ Send I2C Start or Re-Start condition.

stop or ] Send I2C Stop condition.

r or read Read one byte, send ACK. (r:1…255 for bulk reads)

hd Read one byte, send ACK. (hd:1…255 for bulk reads). Displays a hexdump of the result

w or write Followed by values to write byte(s). (w:1…255 for bulk writes)

0 Write this Octal value, check ACK. Format is prefixed by a 0 (values from 000 to 077)

0b Write this binary value, check ACK. Format is 0b00000000 for a byte, but partial bytes are also fine: 0b1001.

0x Write this HEX value, check ACK. Format is 0x01. Partial bytes are fine: 0xA. A-F can be lower-case or capital letters.

0-255 Write this decimal value, check ACK. Any number not preceded by 0x or 0b is interpreted as a decimal value.

" Write an ASCII-encoded string

Write support optional repeat : (eg.: 10:1…255 for repeated write of same value 10 in this example)

space Value delimiter. Use a space to separate numbers/commands. Any combination is fine, delimiter is required between each number/command, example: [ 0x1 0xff 0 10 0b11 077 ]

& Delay 1uS. (&:1…1000000 for multiple delays)

% Delay 1mS. (%:1…1000000 for multiple delays)

~ Write a random byte. (~:10 repeats the same random byte 10 times)

###Protocol interaction example usage I2C1 write/read:

i2c1> [ 0x01 0xFF 0 1 0x80 0x55 0xAA 0xFF 0x11:4 [ 0x00 r:4 ]
I2C START
WRITE: 0x01 ACK 0xFF ACK 0x00 ACK 0x01 ACK 0x80 ACK 0x55 ACK 0xAA ACK 0xFF ACK 0x11 ACK 0x11 ACK 0x11 ACK 0x11 ACK
I2C START
WRITE: 0x00 ACK
READ: 0x00 ACK
READ: 0x00 ACK
READ: 0x00 ACK
READ: 0x00 NACK
I2C STOP

##Additional informations about I2C

ACK/NACK management is same as BusPirate I2C see chapter ACK/NACK management: http://dangerousprototypes.com/docs/I2C

For more details on I2Cprotocol see: http://en.wikipedia.org/wiki/I%C2%B2C

I2C Pull-up Resistors: It is recommended to use external Pull-Up resistors (for I2C > 100KHz, like 10K for 100Khz and 2.2K for 400KHz/1MHz).

So recommended resistor for I2C is 2.2K.

http://dsscircuits.com/articles/effects-of-varying-i2c-pull-up-resistors

http://www.edn.com/design/analog/4371297/Design-calculations-for-robust-I2C-communications

How to Flash/Use HydraFW

How to Build/Flash/Use HydraFW

Developer Getting-Started with HydraBus and STM32CubeIDE

Hardware

Firmware (hydrafw) performances

Firmware (hydrafw) Application guides

Firmware (hydrafw) guides

How to Help

Clone this wiki locally