6410 IIC读写问题

最近一直在做IIC读写测试,网上下载的驱动测试程序可以正确读写一个字节,但是整个读写就会导致SCL或者SDA一直为低。但是我自己的程序用示波器跟踪SCL和SDA信号一直都是高电平。由于是第一次接触这方面,不知道问题出在哪儿。

后来终于发现,可以调整驱动从串口打印驱动运行的信息,经过对比两个程序打印的信息,发现我的程序根本没有进入iocontrol的case里面。对比驱动打印的信息,发现我的控制码有错误。  我的驱动中控制码是通过CTL_CODE(FILE_DEVICE_IIC, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)函数得到的,并不是单纯的0,1,2。。。更改控制码以后,发现我自己的程序可以正确读写一个字节了。但是数据量大了还是会出现data abort的问题,由于csdn上有人问过这个问题,我照着他的方法修改了驱动以后,还是不对。但是如果修改时钟或者增加一点时延的话,可以连续读写的数据量会有适当的增加。我觉得这个跟iic的时序有关系。但是现在不知道应该怎么修改。哎。。还需要好好研究研究,做这方面的朋友我们可以一起讨论。(*^__^*) 嘻嘻……

 

补充:控制码应该是这样:

#define FILE_DEVICE_IIC 0x00000004

#define METHOD_BUFFERED (0)

#define FILE_ANY_ACCESS (0)

#define CTL_CODE(DeviceType, Function, Method, Access) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))

#define IOCTL_IIC_SET_CLOCK CTL_CODE(FILE_DEVICE_IIC, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_IIC_SET_DELAY CTL_CODE(FILE_DEVICE_IIC, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_IIC_WRITE CTL_CODE(FILE_DEVICE_IIC, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_IIC_READ CTL_CODE(FILE_DEVICE_IIC, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_IIC_SET_MODE CTL_CODE(FILE_DEVICE_IIC, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_IIC_SET_FILTER CTL_CODE(FILE_DEVICE_IIC, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值