打印

请教PSoC的I2C模块使用问题

[复制链接]
3460|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chengli|  楼主 | 2009-8-12 17:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    我们在使用CY8C21123,里面用到了I2C模块,在附件的手册说明里,我们找到这个函数 BYTE I2Cm_bWriteCBytes(BYTE bSlaveAddr, const BYTE * pbXferData, BYTE bCnt, BYTE bMode)
    但是有个问题,比如,24C02这个I2C的slave的地址是0x03;我们需要往这个24C02的0x08地址写入0xff这个数据,在手册中的函数中,slave的地址(这里是0x03),都有体现;但是,具体的slave中数据要写入的地址(0x08)没有体现,请问,该如何处理,该使用哪个函数?
沙发
jxin| | 2009-8-13 12:26 | 只看该作者
你说的是Slave internal sub-address? 你看看I2Cm模块datasheet的page 12 of 13中的txCBuf的定义对你有没有帮助?
const BYTE txCBuf[] = { 0x00, // Slave internal sub-address 0
0x12,0x34,0x08, // Seconds and minutes in BCD
                         // 8:34:12am
0x01,                // Day of Week, Monday
0x15,0x03,0x02, // Day-Month-year 15-Mar-02
0x93 }; // Enable clock output

使用特权

评论回复
板凳
ni_labview| | 2009-8-13 13:18 | 只看该作者
把你的代码或简单project发上来,大家帮忙看看,应该没问题

使用特权

评论回复
地板
chengli|  楼主 | 2009-8-14 16:36 | 只看该作者
哦,呵呵,谢谢大家,是这样,我发现,不能使用I2Cm模块,只能支持I2CHW模块。现在的疑问是,如果CY8C21123作为host,我们给其它设备发送控制的命令字,那么改怎么使用它提供的函数来写入?我的工程很简单就是发送几个控制指令(一个二维数组,地址和命令字)

使用特权

评论回复
5
chengli|  楼主 | 2009-8-14 16:39 | 只看该作者
例如:我找到手册里面的一个函数:
I2CHW_InitWrite
说明:
此函数初始化一个指向用于存储数据的从设备数据缓冲区指针,并初始化同一缓冲区的计数字节的数值。计数器初始化为最大的供应缓冲区长度。在主设备写入操作的下一个实例中,数据将放置到由此函数所定义的地址。
C语言原型:
void I2CHW_InitWrite(BYTE * pWriteBuf, BYTE bBufLen);

但是大家都知道,需要给I2C的设备写命令字,我们需要写入设备地址,和命令字所在设备里的具体地址和数据,那么这个函数似乎就不能用,但是I2CHW只有这一个写的函数,请问大家该如何实现那?

使用特权

评论回复
6
chengli|  楼主 | 2009-8-14 16:40 | 只看该作者
难道cypress的I2C不能当host来写入东西?

使用特权

评论回复
7
ni_labview| | 2009-8-17 10:32 | 只看该作者
I2CHW_bWriteBytes(0x50, txBuffer, 3, I2CHW_CompleteXfer);
while(!I2CHW_bReadI2CStatus() & I2CHW_WR_COMPLETE);
I2CHW_ClrWrStatus();
楼主,这是我写24C04的程序,0X50是器件地址,txBuffer[0]是字节地址,txBuffer[1],txBuffer[2]是要写入的数据
没有其他的啊,实在不成我把代码发你,留个邮箱

使用特权

评论回复
8
Cypress2009| | 2009-8-23 16:01 | 只看该作者
学习了

使用特权

评论回复
9
Cypress-lh| | 2009-8-23 16:55 | 只看该作者
路过

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

66

帖子

1

粉丝