阅读:1456回复:6
FX2的I2C读写的一个问题!
我需要利用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的多个例子都没有我上面的用法,都是对一个设备地址写入多个数据。 请问我上面的用法对么?如果不对,那该如何做? |
|
|
沙发#
发布于:2007-03-02 11:10
I2C有一个设备地址,通常似乎是0x42和0x43,分别对应读写,还有个子地址,对应每个寄存器
EZUSB_WriteI2C里面填的应该是子地址,也就是寄存器地址,你可以看看这个函数的源代码 |
|
板凳#
发布于:2007-03-02 12:12
感觉楼上说的跟文档有些出入
|
|
|
地板#
发布于:2007-03-05 10:20
恩,是有问题,
下面为写代码: BYTE xdata dat[2]; dat[0] = 0x12;//寄存器地址 dat[1] = 0x80;//要写的值 EZUSB_WriteI2C(0x21, 2, dat); |
|
地下室#
发布于:2007-03-05 10:20
在用I2C之前必须用
EZUSB_InitI2C(); 来初始化I2C |
|
5楼#
发布于:2007-03-05 13:38
我现在做法跟楼上说的基本一致,就是在每次写完一个寄存器后我调了一次EZUSB_WaitForEEPROMWrite(),看了几个例子,都如此用,
|
|
|
6楼#
发布于:2007-03-05 17:11
delay以下就行了
我调用那个函数程序老是死掉,所以我干脆delay了1ms,把那个函数去掉了 工作正常没问题 |
|