Python和科学计算认证群组  - 讨论区

标题:ctype 变量类型问题 传入缓冲区数据

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哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号