IIC总线数据问题

MEIDANZON 2011-06-13 10:32:01
上次发贴有点乱,这里总结一下,我的IIC设备是MC44S803,这是一个硅调谐器。
IIC协议我也是知道的,写的过程是:
设备地址+数据+数据地址
它的写地址是11000000+数据20位+数据地址位4位
它的读地址是11000001+数据20位+数据地址位4位
要读数据需要设置数据寄存器地址,具体的就别写了,上代码

unsigned char i2c_write_buff[3]={0x00,0x00,0x0b};//最后4位为数据寄存器地址(b),最后8-4位为设置下次要读的地址(0)
unsigned char i2c_read_buff[3];
IIC_IO_DESC IIC_Write,IIC_Read;
IIC_Write.SlaveAddress=0xc0;//1100 0000
IIC_Write.Data=&i2c_write_buff[0];
IIC_Write.Count=3;

IIC_Read.SlaveAddress=0xc1;//1100 0001
IIC_Read.Data=&i2c_read_buff[0];
IIC_Read.Count=3;
DWORD bytes;
bRet=DeviceIoControl(m_hI2C,IOCTL_IIC_READ,&IIC_Write,sizeof(IIC_Write),&IIC_Read,sizeof(IIC_Read),&bytes,NULL);
大家帮忙看看有错不?
我已经设置MODE=2了,是MASTER_RECEIVE
但是用示波器看的话,写地址+3个BYTE的数据没问题,读地址也没问题,但是数据就出问题了
DNW显示出错
Exception 'Data Abort' (4): Thread-Id=01450006(pth=8f94ec48), Proc-Id=00400002(pprc=86809308) 'NK.EXE', VM-active=05e70032(pprc=874967a4) 'edm.exe'
PC=c0c828ac(s3c6410_iic.dll+0x000028ac) RA=c0c827c4(s3c6410_iic.dll+0x000027c4) SP=d2c8fe64, BVA=000efe00
...全文
135 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
MEIDANZON 2011-06-13
  • 打赏
  • 举报
回复
从示波器上看写的过程没错,读的过程本来应该发0xc1之后CLK经过周期就停止了,我看资料里关于读的过程是真么写的,
A7-A1 R/W (slave ack) D19-D12(master ack) D9-D4(master ack) D3-D0 A3-A0(master not ack)
是不是这中间需要转换IIC_MODE而IIC的驱动不支持这样的操作啊?
当我遇上-你 2011-06-13
  • 打赏
  • 举报
回复
内存泄露,LZ可以看下,数据的使用,先发个简单的测试
MEIDANZON 2011-06-13
  • 打赏
  • 举报
回复
关键问题是在读的过程中ACK分别由2个芯片产生的,估计是驱动写乱了,自己改的话太麻烦了,是最后的办法,优先有现成的,用操作系统的根本也在代码的通用性,减少开发时间。
MEIDANZON 2011-06-13
  • 打赏
  • 举报
回复
可是,我看过IIC的驱动它就是真么做的啊,不过是按指针操作的,我在网上查到了,有个人发贴说遇到的问题和我的一样,都是可以写,但是读就乱套了,我个人感觉就是ACK的问题呢,有没有人用过6410的IIC驱动,没有bug的给我发一个?
meidanzon@126.com
先谢谢大家了
guetcw 2011-06-13
  • 打赏
  • 举报
回复
你在IIC驱动中先把数据读到一个缓冲里,然后再把缓冲的数据COPY到DeviceIoControl传进来的那个地址里

19,524

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧