从i2c地址访问值

时间:2012-10-29 23:11:25

标签: c memory i2c

您可以查看此网站:http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NSK1042,以便更好地了解我正在谈论的内容。例如,网站上写着:传感器的i2c地址是0x10,那里的值表是:

Address       Type           Contents

00 – 07H      chars           Serial Version Number

43H           byte            Sensor 1 DC Signal Strength

如何在C中访问这些值?感谢。

2 个答案:

答案 0 :(得分:3)

这些寄存器可以是存储器映射的。您需要做的一些事情:

  • 将设备的物理内存映射到程序地址空间
  • 将指向此区域的任何指针声明为volatile

volatile关键字将阻止编译器“优化”程序不正确。例如通过假设读取到相同的内存位置将产生相同的结果,因为程序没有写入它。

这很容易的部分是声明一个结构,使得所有偏移都与设备相同,并且每个部分的大小都合适。

struct hitech {
    char serial_version[8];
    char manufacturer[8];
    /* etc */
};

volatile struct hitech *my_device;

第二部分是设备映射的位置。如果它已插入您的计算机,您应该能够看到这一点。您可能需要执行以下操作之一:mmap设备的物理地址。或者只写my_device = 0x<地址>。或者是两者的结合。

来自网站: “IRSeeker V2传感器的I2C地址为0x10”

所以你想为my_device写上面的0x10。

然后,您需要编译正确的微控制器,并将程序作为固件加载到正确的位置。

你最好使用他们的编程语言。

答案 1 :(得分:0)

假设他们没有为您提供SDK来访问这些值:

// I'm assuming these are read-only, hence the "const"
const char *g_serialVersionNumber = (const char *)0x00; // be careful not to access more than 8 bytes
const unsigned char *g_sensor1DCSignalStrength = (const unsigned char *)0x43;

void main()
{
    printf("Serial version number: %s\n", g_serialVersionNumber);
    printf("Sensor 1 DC Signal Strength: %d\n", *g_sensor1DCSignalStrength);
}