choce
驱动牛犊
驱动牛犊
  • 注册日期2006-04-24
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分590分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
阅读:1456回复:6

FX2的I2C读写的一个问题!

楼主#
更多 发布于:2007-03-01 14:59
  我需要利用FX2的I2C来设置接在FX2上的设备的寄存器,我想用FX2提供的I2C库函数EZUSB_WriteI2C(BYTE addr, BYTE length, BYTE xdata *dat)来作,比如说我有100个寄存器需要设置,对应每个寄存器都有一个地址和一个待写入的数据,我的想法是用一个while或for循环每次改变addr和dat参数,这样循环100次就完成了寄存器的设置。
     但我从文档中发现的addr参数是I2C device address,也就是说对应我的设备这个地址是固定的,并且我看了FX2的多个例子都没有我上面的用法,都是对一个设备地址写入多个数据。
     请问我上面的用法对么?如果不对,那该如何做?
SEIZE THE DAYS!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-02 11:10
I2C有一个设备地址,通常似乎是0x42和0x43,分别对应读写,还有个子地址,对应每个寄存器
EZUSB_WriteI2C里面填的应该是子地址,也就是寄存器地址,你可以看看这个函数的源代码
choce
驱动牛犊
驱动牛犊
  • 注册日期2006-04-24
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分590分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-02 12:12
感觉楼上说的跟文档有些出入
SEIZE THE DAYS!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-05 10:20
恩,是有问题,
下面为写代码:
    BYTE xdata dat[2];
    dat[0] = 0x12;//寄存器地址
    dat[1] = 0x80;//要写的值
    EZUSB_WriteI2C(0x21, 2, dat);
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-03-05 10:20
在用I2C之前必须用
     EZUSB_InitI2C();
来初始化I2C
choce
驱动牛犊
驱动牛犊
  • 注册日期2006-04-24
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分590分
  • 威望60点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-03-05 13:38
我现在做法跟楼上说的基本一致,就是在每次写完一个寄存器后我调了一次EZUSB_WaitForEEPROMWrite(),看了几个例子,都如此用,
SEIZE THE DAYS!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-03-05 17:11
delay以下就行了
我调用那个函数程序老是死掉,所以我干脆delay了1ms,把那个函数去掉了
工作正常没问题
游客

返回顶部