关于6410 IIC读写AT24C02!做过的请进!

LH806732 2009-06-30 09:35:59
这两天在编写测试6410 IIC,发现一个非常奇怪的问题,
读数据时会产生数据终止,不是每次都会,但多读了几次就一定会产生数据异常。异常信息如下:
Exception 'Data Abort' (4): Thread-Id=01840006(pth=85aa48d4), Proc-Id=00400002(pprc=82699308) 'NK.EXE', VM-active=04ec0006(pprc=849cda50) 'explorer.exe'
PC=c0b721cc(s3c6410_iic.dll+0x000021cc) RA=c0b721b8(s3c6410_iic.dll+0x000021b8) SP=d283fe64, BVA=0004f2cd


应用里面读取一Byte数据函数如下:
void CIICDlg::IICReadModeOneByte(void)
{
UCHAR OutputBuf=0;//read on byte
DWORD ReadBytes;
IIC_IO_DESC IIC_AddressData, IIC_Data;
char AddrBuf[4];
UCHAR WordAddr=0;
CString str;
char xx[4];

m_addr_buf.GetWindowTextW(str);
wcstombs(AddrBuf, str, sizeof(AddrBuf));//str->pOutput
WordAddr = atoi(AddrBuf);
RETAILMSG(1, (TEXT("[APP IICReadModeSingle]: WordAddr = 0x%x\r\n"), WordAddr));

/*Dummy write*/
IIC_AddressData.SlaveAddress = IicSet.slave_addr;//write
IIC_AddressData.Data = &WordAddr;//start addr
IIC_AddressData.Count = 1;//sizeof(WordAddr);

IIC_Data.SlaveAddress = IicSet.slave_addr;//|0x1;//read
IIC_Data.Data = &OutputBuf;
IIC_Data.Count = 1;//sizeof(OutputBuf);

if (!DeviceIoControl(hIic,IOCTL_IIC_READ, &IIC_AddressData, sizeof(IIC_IO_DESC), &IIC_Data, sizeof(IIC_IO_DESC),&ReadBytes, NULL))
{
m_receive_buf.SetWindowTextW(TEXT("IIC read single data failed !"));
}
else
{
}

}
...全文
678 45 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
raosining 2012-04-13
  • 打赏
  • 举报
回复
这个帖子好啊,不知道最新的BSP这些问题解决了没有
电子青蛙 2011-08-17
  • 打赏
  • 举报
回复
楼主问题怎么解决的呀 可不可以发一份源码啊 我的老是测试不对啊 多谢
wild_caojian 2010-08-18
  • 打赏
  • 举报
回复
这个上面牛人还真多呀
LH806732 2010-07-31
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 insoonior 的回复:]
引用 40 楼 insoonior 的回复:
哈哈,这个问题,我也碰到过了,我的问题已经解决了
刚开始我的情况跟你的差不多,也是发生data abort,我的是因为camera的驱动程序里没有把IIC释放出来,我在Camera的驱动里手动调用了CloseHandle(IIC)后,应用程序就正常了~~~不知道你的情况是不是跟我的一样。!!

更正一下,经再测试,这个不是正确的,问题现已经解决……
[/Quote]

typedef struct _IIC_IO_DESC {
UCHAR SlaveAddress; // Slave Address
PUCHAR Data; // pBuffer
DWORD Count; // nBytes to read/write
} IIC_IO_DESC, *PIIC_IO_DESC;


能说下怎么映射的么?我很久没搞6410了,在弄i.MX51的。

insoonior 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 insoonior 的回复:]
哈哈,这个问题,我也碰到过了,我的问题已经解决了
刚开始我的情况跟你的差不多,也是发生data abort,我的是因为camera的驱动程序里没有把IIC释放出来,我在Camera的驱动里手动调用了CloseHandle(IIC)后,应用程序就正常了~~~不知道你的情况是不是跟我的一样。!!
[/Quote]
更正一下,经再测试,这个不是正确的,问题现已经解决,主要是IIC_IO_DESC这个参数里面包括指针,需要进行指针的映射
insoonior 2010-07-20
  • 打赏
  • 举报
回复
哈哈,这个问题,我也碰到过了,我的问题已经解决了
刚开始我的情况跟你的差不多,也是发生data abort,我的是因为camera的驱动程序里没有把IIC释放出来,我在Camera的驱动里手动调用了CloseHandle(IIC)后,应用程序就正常了~~~不知道你的情况是不是跟我的一样。!!
LH806732 2010-04-28
  • 打赏
  • 举报
回复
已经很久不做6410了,没有解决的人可以尝试一下加个临界区或者互斥。
LH806732 2010-04-28
  • 打赏
  • 举报
回复
只是如上述连接中所说的,出错率减少了,但是错误还是存在。
LH806732 2010-04-28
  • 打赏
  • 举报
回复
不是我不厚道,确实没有解决这个问题。

大家可以看下
http://blog.csdn.net/knock/archive/2009/11/04/4766991.aspx
BIGBIRDINWOODS 2010-04-22
  • 打赏
  • 举报
回复
楼主真不厚道。!
  • 打赏
  • 举报
回复
我也正在查这个问题。
shellgo 2009-12-30
  • 打赏
  • 举报
回复
定一定,现在也出现了这个问题了,
痛苦的来,
shellgo 2009-12-29
  • 打赏
  • 举报
回复
又出问题了! camera应用程序启动的时候要通过IIC总线写register,而且还是一大堆,就在这个过程中,电源管理IC驱动也要通过IIC总线去读取电池电压和电流及充放电状态,这样混在一起,就出现了TX Time Out的现象。而关掉PMU驱动读IIC部分则camera模块写register每次都成功!

经过一番思索,camera写寄存器只有启动时一次,后面几乎都不怎么写,只要这段时间不发生冲突不就完事大吉了? 基于此,将PMU驱动和camera驱动读写IIC部分加入了互斥元保护,这样,访问IIC之前先要请求,得到机会后才能读写。 修改后,camera和PMU不再冲突,可以正常的读写了。
DWORD dwWaitResults=-1;
dwWaitResults=AcqIICMutex();
if (WAIT_OBJECT_0 != dwWaitResults)
{
RETAILMSG(1,(TEXT("[CAM]Timeout on acquiring mutex for IIC\n")));
}
else
{
//write value to register.
。。。。。。。。。
dwWaitResults=RelIICMutex();

}

那个兄弟的blog上写的,哪位知道吧这段代码放在哪里?
shellgo 2009-12-29
  • 打赏
  • 举报
回复
http://blog.csdn.net/knock/archive/2009/11/05/4771874.aspx
问题到底怎么解决的?
beeboobeeboo 2009-11-02
  • 打赏
  • 举报
回复
怎么解决的呀?
gooogleman 2009-07-16
  • 打赏
  • 举报
回复
楼主也不说是什么原因,有点不厚道啊。嘿嘿。
LH806732 2009-07-15
  • 打赏
  • 举报
回复
解决了,自己顶一下。


无满意答案结贴
LH806732 2009-07-15
  • 打赏
  • 举报
回复
没有人做过S3C6410读写AT24C02的程序吗?你们的都OK?
LH806732 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 wdw1600 的回复:]
iic 每次读写完都要回到最初状态,不然出错
[/Quote]

你所谓的最初状态是指初始化状态?????????????

wdw1600 2009-07-14
  • 打赏
  • 举报
回复
iic 每次读写完都要回到最初状态,不然出错
加载更多回复(25)

19,519

社区成员

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

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