打印

关于Cypress Cy8C5868系列IIC问题

[复制链接]
1584|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

        项目需要通过IIC来跟个外部芯片通信,按照样例模板建立个简单的工程进行测试,结果使用示波器都看到SDA和SCL线上的波形(我单独写个程序测试SDA和SCL,管脚配置是没有问题的)。请大家过来看看可能是什么原因,谢谢。

1.        IIC模块的配置,很简单,就直接用样例的模块来:



2.        代码:也是样例的代码,只是删除了LCD部分的程序

#include <device.h>

/* The I2C Slave address by default in a PSoC device is 8 */
#define I2C_SLAVE_ADDRESS    (8u)
/* Set the write buffer length to be 16 bits or 2 bytes */
#define WR_BUFFER_SIZE       (2u)

/*******************************************************************************
* Function Name: main
********************************************************************************
*
* Summary:
*  main function performs following functions:
*   1. Starts all used components.
*   2. Controls sequencing of ADC inputs.
*   3. Reads ADC converted data, sends this data via a I2C Master.
*   4. Displays ADC converted data on Character LCD.
*
* Parameters:
*  None.
*
* Return:
*  None.
*
*******************************************************************************/
int main()
{
    uint8 temp;
    uint8 sample_segment[WR_BUFFER_SIZE];
    uint16 sample_full;

    I2CM_Start();
    for(;;)
    {
        sample_segment[0] = 0xEE;
        sample_segment[1] = 0xDD;
        do
        {
            /* The syntax below automatically writes a buffer of data to a slave
             * device from start to stop.
              */
            temp = I2CM_MasterWriteBuf(I2C_SLAVE_ADDRESS, (uint8 *)sample_segment,
                                        WR_BUFFER_SIZE, I2CM_MODE_COMPLETE_XFER);
        }
        while (temp != I2CM_MSTR_NO_ERROR);

        /* Wait for the data transfer to complete */
        while(I2CM_MasterStatus() & I2CM_MSTAT_XFER_INP);

        temp = I2CM_MasterClearStatus();

        /* Delay introduced for ease of reading LCD */
        CyDelay(2000u/*ms*/);

    }  /* End forever loop */
} /* End main */


3.        问题现象:程序运行时,用示波器检测,看不到SDA和SCL上的波形。但是我这边单独控制SDA和SCL是可以用波形产生的,所以管脚配置是没有错的。 为什么用IIC模块就不得?

234242.png (40.89 KB )

IIC配置

IIC配置
沙发
wsp1008| | 2017-9-19 14:52 | 只看该作者
样例代码做了哪些修改?
IIC slave是什么设备?
你所说的单独控制具体怎么实现?

使用特权

评论回复
板凳
lookerForYou|  楼主 | 2017-9-19 15:13 | 只看该作者
wsp1008 发表于 2017-9-19 14:52
样例代码做了哪些修改?
IIC slave是什么设备?
你所说的单独控制具体怎么实现?

样例没有做什么修改,只是更改了管脚的配置,删除了LCD方面的代码。
单独修改指的是直接给管脚幅值,即:
    //管脚测试
    SDA_Write(1);  
    SCL_Write(1);  
    CyDelay(50);//延迟
    SDA_Write(0);  
    SCL_Write(0);
    CyDelay(50);//延迟

单独测试的时候,示波器是可以看到波形的。使用IIC模块后,就看不到管教的波形

使用特权

评论回复
地板
wsp1008| | 2017-9-19 15:33 | 只看该作者
看上去直接在IO口写高低电平并不能说明IIC的问题,
外接的上拉电阻接了吗?阻值有多大

使用特权

评论回复
5
lookerForYou|  楼主 | 2017-9-19 18:07 | 只看该作者
wsp1008 发表于 2017-9-19 15:33
看上去直接在IO口写高低电平并不能说明IIC的问题,
外接的上拉电阻接了吗?阻值有多大 ...

嗯,电路上SDA和SCL都外接10K的上拉电阻了。
项目配置上,我也是试着内部没有配置上拉电阻过了。
此处IIC我确实看不出有什么问题,但是总线上就是没有波形,总不会是管脚配置的驱动方式有问题的吧,这个配置方式是样例中的配置方式的。

使用特权

评论回复
6
lookerForYou|  楼主 | 2017-9-20 10:59 | 只看该作者
这的代码是没有把中的中断打开,但是后续我打开了,也还是不得,谢谢

使用特权

评论回复
7
zjuzxh| | 2017-9-20 14:48 | 只看该作者
你挂从设备了吗?如果没有的话,主机收不到ACK,发完地址位就结束了。
你可以利用示波器抓一下program结束之后第一帧的波形看看有没有内容。

使用特权

评论回复
8
lookerForYou|  楼主 | 2017-9-22 11:09 | 只看该作者
找到原因了,硬件上出了问题,谢谢大家

使用特权

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

本版积分规则

5

主题

23

帖子

1

粉丝