rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
i2c_bb.h
Go to the documentation of this file.
1/**
2 * @file i2c_bb.h
3 * @brief Bit-banged I2C driver
4 *
5 * @date February 6, 2020
6 * @author Matthew Kennedy, (c) 2020
7 */
8
9#pragma once
10
12public:
13 // Initialize the I2C driver
14 bool init(brain_pin_e scl, brain_pin_e sda);
15 // Release resources
16 void deinit();
17
18 // Write a sequence of bytes to the specified device
19 void write(uint8_t addr, const uint8_t* data, size_t size);
20 // Read a sequence of bytes from the device
21 void read(uint8_t addr, uint8_t* data, size_t size);
22 // Write some bytes then read some bytes back after a repeated start bit
23 void writeRead(uint8_t addr, const uint8_t* writeData, size_t writeSize, uint8_t* readData, size_t readSize);
24
25 // Read a register at the specified address and register index
26 uint8_t readRegister(uint8_t addr, uint8_t reg);
27 // Write a register at the specified address and register index
28 void writeRegister(uint8_t addr, uint8_t reg, uint8_t val);
29
30private:
31 // Returns true if the remote device acknowledged the transmission
32 bool writeByte(uint8_t data);
33 uint8_t readByte(bool ack);
34
35 void sda_low();
36 void sda_high();
37 void scl_low();
38 void scl_high();
39
40 // Send an I2C start condition
41 void start();
42 // Send an I2C stop condition
43 void stop();
44
45 // Send a single bit
46 void sendBit(bool val);
47 // Read a single bit
48 bool readBit();
49
50 // Wait for 1/4 of a bit time
51 void waitQuarterBit();
52
53#if EFI_PROD_CODE
58#endif
59};
constexpr uint8_t addr
Definition ads1015.cpp:14
void read(uint8_t addr, uint8_t *data, size_t size)
Definition i2c_bb.cpp:210
void waitQuarterBit()
Definition i2c_bb.cpp:183
ioportid_t m_sclPort
Definition i2c_bb.h:54
ioportmask_t m_sdaPin
Definition i2c_bb.h:57
void write(uint8_t addr, const uint8_t *data, size_t size)
Definition i2c_bb.cpp:190
ioportid_t m_sdaPort
Definition i2c_bb.h:56
bool writeByte(uint8_t data)
Definition i2c_bb.cpp:143
void writeRegister(uint8_t addr, uint8_t reg, uint8_t val)
Definition i2c_bb.cpp:235
void start()
Definition i2c_bb.cpp:77
bool readBit()
Definition i2c_bb.cpp:122
bool init(brain_pin_e scl, brain_pin_e sda)
Definition i2c_bb.cpp:37
void scl_low()
Definition i2c_bb.cpp:31
void sda_low()
Definition i2c_bb.cpp:19
void sda_high()
Definition i2c_bb.cpp:13
void stop()
Definition i2c_bb.cpp:91
uint8_t readByte(bool ack)
Definition i2c_bb.cpp:163
uint8_t readRegister(uint8_t addr, uint8_t reg)
Definition i2c_bb.cpp:227
void scl_high()
Definition i2c_bb.cpp:25
void writeRead(uint8_t addr, const uint8_t *writeData, size_t writeSize, uint8_t *readData, size_t readSize)
Definition i2c_bb.cpp:204
ioportmask_t m_sclPin
Definition i2c_bb.h:55
void sendBit(bool val)
Definition i2c_bb.cpp:102
void deinit()
Definition i2c_bb.cpp:64
uint32_t ioportmask_t
Digital I/O port sized unsigned type.
Definition hal_pal_lld.h:78
GPIO_TypeDef * ioportid_t
Port Identifier.
composite packet size