2012年08月28日 星期二 21:48
USBIO_ReadI2C(//从两线串口读取一个字节数据,仅适用于7位地址的设备
ULONG iIndex,//指定USB2I2C设备序号
ULONG iDevice,//低7位指定设备地址
ULONG iAddr,//指定数据单元的地址
PULONG oByte);//指向一个字节单元,用于保存读取的字节数据
说明:从两线串口读取一个字节数据。仅适用于7位地址的设备,不支持带从地址的I2C设备。
USBIO_WriteI2C(//向两线串口写入一个字节数据,仅适用于7位地址的设备
ULONG iIndex,//指定USB2I2C设备序号
ULONG iDevice,//低7位指定设备地址
ULONG iAddr,//指定数据单元的地址
ULONG iByte);//待写入的字节数
说明:从两线串口读取一个字节数据。仅适用于7位地址的设备,不支持带从地址的I2C设备。
USBIO_WriteRead(//执行数据流命令,先输出再输入
ULONG iIndex,//指定USB2I2C设备序号
ULONG iWriteLength,//写长度,准备写出的长度
ULONG iWriteBuffer,//指向一个缓冲区,放置准备写出的数据
ULONG iReadStep,//准备读取的单个块的长度,总长度为(iReadStep*iReadTimes)
ULONG iReadTimes,//准备读取的次数
PULONG oReadLength,//指向长度单元,返回后为实际读取的长度
ULONG oReadBuffer);//指向一个足够大的缓冲区,用于保存读取的数据
说明:先输出数据再输入数据,执行数据流命令,适用于同步串口等。
-------------------
前两个函数比较简单
from ctypes import *
p = WinDLL('USBIOX.DLL')
b = c_long()
print p.USBIO_WriteI2C(0,0x48,0x2,0x1)
print p.USBIO_ReadI2C(0,0x48,0x2,byref(b))
print b.value
前两个函数都可以调用。
--------------------------------
仔细看了ctype的说明http://docs.python.org/library/ctypes.html
但是第三个的时候例如 传入 0x11和0x22两个数据,并且读取两个数据,
一直WindowsError: exception: access violation reading 0x000000..
应该是输入的参数不对,输入的参数该什么类型怎么幅值0x11和0x22
这样可以吗
iwrite_buf = (c_ubyte * 2)(0x3c,0x0a)
oread_buf = (c_ubyte * 2)(0,0)
2012年08月29日 星期三 09:16
把调用USBIO_WriteRead的程序贴出来看看。注释中说oReadBuffer需要一个足够大的缓冲区,你应该创建一个足够大的,例如:
oread_buf = (c_ubyte*10000)()
2012年08月29日 星期三 09:54
#-*-coding:utf-8-*-
from ctypes import *
p = WinDLL('USBIOX.DLL')
print p.USBIO_OpenDevice(0)
oReadLength = c_long()
iwrite_buf = (c_ubyte * 3)(0x90,0x00,0x91)
oread_buf = (c_ubyte * 10000)()
print p.USBIO_WriteRead(0,len(iwrite_buf),iwrite_buf,8,2,byref(b),oread_buf)
一直在p.USBIO_WriteRead这句,没有返回
2012年08月29日 星期三 13:59
我觉得参数没有问题。最好能看看I2C的波形,看看数据是否写出和读入。
Zeuux © 2024
京ICP备05028076号