Hi, I'm new to embedded development and I'm currently following the Discovery book using a microbit v2 board. I've gone through chapter 8, which is on I2C and, in particular, I have followed the examples that describe how to use I2C to communicate with the accelerometer in the LSM303AGR component of the board.
I think I have understood what's happening, but since there's a lot going on (from my perspective) I wanted to check whether I'm getting things right. What I believe I'm doing in this chapter is the following:
-
The microbit board has a component that can "speak" I2C called TWI. This component can be used through the twi module from the microbit BSP/BSP. This module provides an abstraction layer over I2C so I don't have to tell the TWI when and how to change the voltage of the wires, but I can instead give it the address of a node and simply tell it to write a message. I use this module to send messages to the LSM303AGR through I2C.
-
On the section 8.4, I instead use a driver for the LSM303AGR component. This driver already knows the addresses of the sensors and how they will send the information, all it needs is a I2C communication "object" to be able to communicate with the LSM303AGR. So what I do is pass the I2C struct that I got from the twi module to the driver and I can get the data from the sensor directly, without having to worry about the addresses, or establishing the I2C communication, since this is all done by the driver.
-
The reason that the I2C stuct that I got from the twi module is compatible with the driver for the LSM303AGR is because they both follow embedded hal, which provides a specification of how drivers and components should look like and what traits they should implement, including how to implement a I2C struct.
Can you tell me if I'm getting the fundamentals right? I haven't work with embedded software before and at some points is hard to have a clear idea of how everything fits together.