6410 iic测试问题

电子青蛙 2011-08-17 02:24:37
请问大家 wince下 在6410中typedef struct _IIC_IO_DESC {
UCHAR SlaveAddress; // Slave Address
// UCHAR WordAddr;
PUCHAR Data; // pBuffer
DWORD Count; // nBytes to read/write
} IIC_IO_DESC, *PIIC_IO_DESC; 没有定义字节地址 那我怎样将数据写入地址中呢 大家帮帮忙啊
...全文
237 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharoncoffee 2012-05-09
  • 打赏
  • 举报
回复
希望有测试程序的源代码~~~
电子青蛙 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 northcan 的回复:]
iic驱动是你写的吗?
你这个代码只是通过iic流驱动来操作24c08
你可以在iic驱动里面打印一些log出来看看。
CreateFile(_T("IIC0:")
这块是打开iic驱动,调用iic驱动的XXX_Open函数。
你的iic的index是0还是1,这块打开成功了吧?
你这个程序是将mfc控件中的一些内容写入到iic设备。
你在下面这些地方设置一些断点,看看要写的内容的……
[/Quote]
驱动不是自己写的 是tiny6410BSP中自带的 我验证了数据已经写到了自己设置的缓冲区中tmpbuf和w_reg中已经存入数据了 但是并没有写到器件中 器件地址0xa0应该没有错吧
电子青蛙 2011-08-18
  • 打赏
  • 举报
回复
好的 我试试看 已经打开成功了 也提示写入成功 但是验证没有写成功
电子青蛙 2011-08-18
  • 打赏
  • 举报
回复
现在已经读取成功了 但是就是写入不成功 哎
northcan 2011-08-17
  • 打赏
  • 举报
回复
iic驱动是你写的吗?
你这个代码只是通过iic流驱动来操作24c08
你可以在iic驱动里面打印一些log出来看看。
CreateFile(_T("IIC0:")
这块是打开iic驱动,调用iic驱动的XXX_Open函数。
你的iic的index是0还是1,这块打开成功了吧?
你这个程序是将mfc控件中的一些内容写入到iic设备。
你在下面这些地方设置一些断点,看看要写的内容的十六进制数据对不对。
IIC_Data.Data=w_reg;
IIC_Data.Data=tmpbuf;
电子青蛙 2011-08-17
  • 打赏
  • 举报
回复
void CIIC0813Dlg::OnBnClickedWritei2c()
{
DWORD ReadBytes;
UCHAR tmpbuf[10];
UCHAR w_reg[2];
IIC_IO_DESC IIC_Data;
HANDLE hI2CDevice;
CString ss;
hI2CDevice = CreateFile(_T("IIC0:"),GENERIC_READ|GENERIC_WRITE,0, NULL, OPEN_EXISTING,0, NULL);
if(hI2CDevice==INVALID_HANDLE_VALUE )
{
AfxMessageBox(_T("打开失败"));
}
else
{
//GetDlgItem(IDC_CHIPADDR)->GetWindowText((LPTSTR)edit_ChipAdd,4);
//ASC_Hex(edit_ChipAdd,slav_add);
GetDlgItem(IDC_REGADDR)->GetWindowText((LPTSTR)edit_Reg,4);
ASC_Hex(edit_Reg,w_reg);
GetDlgItem(IDC_WDATA)->GetWindowText((LPTSTR)edit_Wdata,4);
ASC_Hex(edit_Wdata,tmpbuf);

UpdateData(FALSE);

IIC_Data.SlaveAddress=SLAVE_WRITE;
IIC_Data.Data=w_reg;
IIC_Data.Count=1;

IIC_Data.SlaveAddress=SLAVE_WRITE;
IIC_Data.Data=tmpbuf;
IIC_Data.Count=1;
if(DeviceIoControl(hI2CDevice,IOCTL_IIC_WRITE,&IIC_Data,sizeof(IIC_IO_DESC),NULL,0,&ReadBytes,NULL))
{
GetDlgItem(IDC_RDATA) -> SetWindowText(_T("IIC write single data successed !"));
}
else
{
GetDlgItem(IDC_RDATA) -> SetWindowText(_T("IIC write single data failed !"));
}
}
CloseHandle(hI2CDevice);


}
这是我写iic的代码 大家看哪块有问题啊 我实在不知道问题在哪啊
电子青蛙 2011-08-17
  • 打赏
  • 举报
回复
我用另外一个网上下的测试的程序可以正确读写的 可惜没有源码 我自己写的就不行啊
northcan 2011-08-17
  • 打赏
  • 举报
回复
S3C6410数据手册的第30章,是讲的它的IIC总线。
northcan 2011-08-17
  • 打赏
  • 举报
回复
关于24c08如何初始化什么的。
再百度一个24c08的数据手册。
northcan 2011-08-17
  • 打赏
  • 举报
回复
没写成功,要看看你的wince 6410的iic驱动有没有问题。
你这个iic时序应该不是io模拟的吧。
是s3c6410芯片里面内置的iic吧。
那数据手册你直接找6410的数据手册,里面应该有IIC这个章节。
电子青蛙 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 northcan 的回复:]
向iic设备写数据
“从地址”就是SlaveAddress
“从地址”在iic外设的数据手册上可以找到
比如iic的时钟IC S35390的从地址是0x61,0x62等等
不同的从地址,操作不同的iic外设的寄存器。
[/Quote]
iic外设的数据手册在哪啊 请教
电子青蛙 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 northcan 的回复:]
24c08是个eeprom吧。
比如向24c08里面写入一个字节:

C/C++ code

i2c_start(); // 起始
i2c_sendbyte(0xa0); // 发送器件从地址
i2c_waitACK(); // 等待应答
i2c_sendbyte(add); // 发送要写入的地址
i2c_waitACK(); // 等待应答……
[/Quote]
我照您的方法写了可是还是不能写进去啊 地址没有写进去
电子青蛙 2011-08-17
  • 打赏
  • 举报
回复
哦 好的 好有启发啊 我写写看 多谢
northcan 2011-08-17
  • 打赏
  • 举报
回复
24c08是个eeprom吧。
比如向24c08里面写入一个字节:

i2c_start(); // 起始
i2c_sendbyte(0xa0); // 发送器件从地址
i2c_waitACK(); // 等待应答
i2c_sendbyte(add); // 发送要写入的地址
i2c_waitACK(); // 等待应答
i2c_sendbyte(dat); // 发送要写入的数据
i2c_waitACK(); // 等待应答
i2c_stop(); // 停止
delay(124); // 延时

楼主用IIC_IO_DESC这个结构体,向iic设备写数据的时候也是先写地址,再写数据。
地址和数据都是对应结构体里面的Data成员。
如:

IIC_IO_DESC;
iic.SlaveAddress = 0xa0;
iic.Data = add; // 要写入的地址
iic.Count = 1;

iic.SlaveAddress = 0xa0;
iic.Data = data; // 要写入的数据
iic.Count = n;


电子青蛙 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crystal28 的回复:]
需要自己准备一块内存.

C/C++ code

UCHAR MyData[64] = {0xff,0x12};//这就是自己准备的内存
DWORD len = 2;
IIC_IO_DESC * pDesc = XXX;
pDesc->Data = MyData;
pDesc->Count = len;
[/Quote]
哦 大概明白了 呵呵 我试一下 不过本人刚接触wince vc 还需要大家帮忙啊 多谢
电子青蛙 2011-08-17
  • 打赏
  • 举报
回复
就是我要写入的地址啊,我把数据写到哪里去了呢,不能每次都从00开始写入吧,我要写一个字节的话,随便写入,不得有个地址吗,是我表达的不够明白吗,您有测试源码吗,可以给我参考一下不,多谢啊
「已注销」 2011-08-17
  • 打赏
  • 举报
回复
需要自己准备一块内存.

UCHAR MyData[64] = {0xff,0x12};//这就是自己准备的内存
DWORD len = 2;
IIC_IO_DESC * pDesc = XXX;
pDesc->Data = MyData;
pDesc->Count = len;
northcan 2011-08-17
  • 打赏
  • 举报
回复
哦。。明白了,楼主说的写入地址,是说向24c02的哪个寄存器里面写数据?
northcan 2011-08-17
  • 打赏
  • 举报
回复
呃。没明白楼主说的写入的字节地址是什么意思。
UCHAR SlaveAddress; 是器件从机地址
PUCHAR Data; 是要写入的数据的buffer指针(首地址)
DWORD Count; 是要写入的数据的字节数

“ 我说的是写入的字节地址 我往哪个里面写数据”
“没有定义字节地址 那我怎样将数据写入地址中呢 ”
说实话,实在读不懂问题。。。。
电子青蛙 2011-08-17
  • 打赏
  • 举报
回复
SlaveAddress这个不是器件地址吗 我接的是24c08 这个地址是0xa0 我说的是写入的字节地址 我往哪个里面写数据
加载更多回复(1)

19,502

社区成员

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

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