You are mostly right, you only need /dev/i2cX if you want to run the
i2ctool.

But some drivers could create its /dev/xyz even when the device is not
present, because some those drivers don't have a kind of probe() function
to get a confirmation from the driver.

When the extern I2C or SPI device has a product/vendor ID register it could
be read to confirm the device was detected.

BR,

Alan

On Sunday, May 2, 2021, yuta <yutr...@gmail.com> wrote:

> Hi Alan,
>
> Thank you for the information!
>
> ---
>
> My understanding for now is below. (For nucleo-F767 board)
> - An initialization file is lying in nuttx/boards/arm/stm32f7/nucle
> o-144/src/stm32_appinitialize.c. (Contents in this file is executed when
> launching NuttX.)
> - Initialization code for specific I2C sensor like MPU9250 should be
> called in the file to associate I2C lower-half and specific sensor's
> upper-half then register the associated driver as like /dev/mpu.
>
> What I'm not sure is if I always need to use i2c_drivers.c(i2c_register())
> which is in nuttx/drivers/i2c/.
> I guess that I don't need to do that. What I need to do is choose which
> upper-half driver to use this time. i2c_drivers.c is maybe a general I2C
> upper-half driver. That's why it can be used when I just want to read/write
> for specific register.
> I guess that a driver called I2C upper-half is basecally created not for
> communicate to general I2C device but created for a specific I2C device
> such as MPU9250 and it provides some data with the form which can be used
> directly like gyro, accel, temp... not like gx_h, gx_l, gy_h, gy_l,....
>
>
> Yuta Ide
>
> On 2021/05/01 21:10, Alan Carvalho de Assis wrote:
>
>> Hi Yuta,
>>
>> stm32_mpu9250initialize("/dev/mpu0");
>>
>> This function receive the name of the device file it will creste. The
>> /dev/i2cX is created by the funcion i2c_register().
>>
>> BR,
>>
>> Alan
>>
>> On Saturday, May 1, 2021, yuta <yutr...@gmail.com> wrote:
>>
>> Gregory,
>>>
>>> Thank you for your answer.
>>> I think I'm asking very easy question since I'm very new to NuttX.
>>>
>>> I'm not still sure how I can enable an I2C device.
>>> I understood that there are lower-half driver and upper-half driver and
>>> they should be associated each other with initialization code.
>>> Refering some documents like below, I added some lines to do that.
>>> I can see /dev/i2c1 now but i2c tool still does not detect any i2c
>>> device.
>>> https://github.com/apache/incubator-nuttx/blob/master/boards
>>> /arm/stm32f0l0g0/nucleo-g070rb/src/stm32_bringup.c#L89-L111
>>>
>>> I also tried to make upper-half driver refering here.
>>> https://github.com/micro-ROS/NuttX/issues/9
>>> In this case, I call mpu9250_register() which I made instead of
>>> i2c_register().
>>> /dev/i2c1 appeared with ls /dev.
>>> However, `i2c dev -b 1 0x03 0x77 ` did not detect any i2c device.
>>>
>>> Yuta Ide
>>>
>>> On 2021/04/30 22:18, Gregory Nutt wrote:
>>>
>>> On 4/30/2021 6:34 AM, yuta wrote:
>>>>
>>>> Hi all,
>>>>> I'm trying to use I2C.
>>>>> I configured below in menuconfig.
>>>>> - System Type > STM32 Peripheral Support > [*] I2C1
>>>>> - Device Drivers > [*] I2C Driver Support
>>>>> then compilation was done successfully.
>>>>> But no I2C device( like /dev/i2c1 ) showed up when I tried ls /dev
>>>>> Do I forget something to do?
>>>>>
>>>>> I'm using Nucleo-F767ZI board.
>>>>>
>>>>> Thank you.
>>>>> Yuta Ide
>>>>>
>>>>> Did you enable an I2C device?  STM32 I2C peripheral support is not an
>>>>>
>>>> I2C device.  It an I2C "lower half" and will not create a character
>>>> device.  You also have to (1) enable an "upper half" device that uses
>>>> I2C,
>>>> (2) create an instance of the I2C "lower half", and (3) bind the "lower
>>>> half" to the "upper half" and register the driver.
>>>>
>>>> Remember, I2C is not a device.  I2C is a bus that provides the physical
>>>> transport to devices on the bus.  You should not normally do direct bus
>>>> access from applications .. although you can with
>>>> drivers/i2c/i2c_driver.c.  i2c_driver.c can be used by your
>>>> board-initialization logic to create a character device that will allow
>>>> appliations to access the bus directly.  So you can create some kind of
>>>> very limited user-space driver.  It is limited because it cannot
>>>> integrate
>>>> simply with other aspects of the device such as GPIO controls or
>>>> interrupts.
>>>>
>>>>
>>>>
>>>>

Reply via email to