NXP MCU 技术论坛
直播中

李慧

8年用户 971经验值
私信 关注
[问答]

用带i2c接口的S32K144EVB板进行测试,发现i2c sck信号很弱是什么原因造成的?

我用带 i2c 接口的 S32K144EVB 板进行测试,发现 i2c sck 信号很弱
还有我发送了3个数据,但是好像只发送了两个数据,而且数据不正确
我用的是演示代码,做了一些修改,你能帮忙看看吗,附件是源代码。


/* 数据传输大小的定义 */
#define 传输大小 (3u)

/*!
  brief 项目的主要功能。
  details 启动初始化顺序如下:
* - __start(启动 asm 例程)
* - __init_hardware()
* - 主要的()
* - PE_low_level_init()
* - Common_Init()
* - 外围设备初始化()
*/

无效 i2c_test()
{
整数计数 = 0;
诠释我;
uint8_t 缓冲区[TRANSFER_SIZE];
而(1)
{
如果(计数 > 1000)
{
计数 = 0;
}
如果(计数 == 0)
{
/* 初始化数据缓冲区 */
    对于 (i = 0u; i < TRANSFER_SIZE; i++)
    {
        缓冲区 = 0x55;
    }

    /* 发送一包数据给总线slave */
    LPI2C_DRV_MasterSendDataBlocking(INST_LPI2C1,缓冲区,TRANSFER_SIZE,真,OSIF_WAIT_FOREVER);

    /* 清空缓冲区,为下一次操作做准备 */
    对于 (i = 0u; i < TRANSFER_SIZE; i++)
    {
        缓冲器 = 0u;
    }

    /* 从总线从机请求数据 */
    LPI2C_DRV_MasterReceiveDataBlocking(INST_LPI2C1,缓冲区,TRANSFER_SIZE,真,OSIF_WAIT_FOREVER);
}
计数++;

}

}

int main(void)
{
/* 为 LPI2C 驱动程序状态结构分配内存 */
lpi2c_master_state_t lpi2c1MasterState;
/* LPI2C 传输缓冲区声明 */
uint8_t buffer[TRANSFER_SIZE];
/* 用于初始化数据缓冲区的循环的变量 */
uint16_t i;
/*** Processor Expert 内部初始化。不要删除此代码!!!***/
#ifdef PEX_RTOS_INIT
PEX_RTOS_INIT(); /* 所选 RTOS 的初始化。宏由 RTOS 组件定义。*/
#endif
/*** Processor Expert 内部初始化结束。***/
/* 初始化和配置时钟
* - 配置系统时钟和分频器
* - 配置 LPI2C 时钟门控
* - 有关详细信息,请参阅时钟管理器组件
* / CLOCK_SYS_UpdateConfiguration(0U,CLOCK_MANAGER_POLICY_AGREEMENT);



/* 初始化引脚
* - 配置 LPI2C 引脚
* - 有关详细信息,请参阅 PinSettings 组件
*/
PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);
/* 初始化 LPI2C 主机配置
* - 从机地址 0x01
* - 快速运行模式,400 KHz SCL 频率
* - 有关配置详细信息,请参阅 LPI2C 组件
*/
LPI2C_DRV_MasterInit(INST_LPI2C1, &lpi2c1_MasterConfig0, &lpi2c1MasterState);
i2c_test();
while(1)
{
/* 初始化数据缓冲区 */
for (i = 0u; i < TRANSFER_SIZE; i++)
{
buffer = 0x55;
}
/* 向总线从机发送一个数据包 */
LPI2C_DRV_MasterSendDataBlocking(INST_LPI2C1, buffer, TRANSFER_SIZE, true, OSIF_WAIT_FOREVER);
/* 清除缓冲区为下一次操作做准备 */
for (i = 0u; i < TRANSFER_SIZE; i++)
{
buffer = 0u;
}
/* 从总线从机请求数据 */
LPI2C_DRV_MasterReceiveDataBlocking(INST_LPI2C1, buffer, TRANSFER_SIZE, true, OSIF_WAIT_FOREVER);
}
/* 驱动示例结束 */
/*** 不要写任何经过这一行的代码,否则它会在代码生成时被删除。***/
/*** RTOS 启动代码。宏 PEX_RTOS_START 由 RTOS 组件定义。不要修改此代码!!!***/
#ifdef PEX_RTOS_START
PEX_RTOS_START(); /* 启动选定的 RTOS。宏由 RTOS 组件定义。*/
#endif
/*** RTOS 启动代码结束。***/
/*** Processor Expert 主例程结束。不要修改此代码!!!***/
for(;;) {
if(exit_code != 0) {
中断;
}
}
返回退出代码;
/*** Processor Expert 主例程结束。不要在下面写代码!!!***/
} /*** 主程序结束。不要修改此文本!!!***/

回帖(1)

卢表镜

2024-4-10 16:29:24
i2c sck信号很弱的原因可能是电缆质量不好或者i2c控制器的输出电平不足。你可以尝试使用更好的电缆或者增强输出电平的方法来解决这个问题。

关于数据传输不正确的问题,可能是由于你修改了演示代码造成的,你需要仔细检查代码的逻辑和操作是否正确,并保证数据格式和长度是正确的。另外,你也可以使用示波器或逻辑分析仪来观察i2c信号以及数据传输的情况,帮助你更好地解决问题。
举报

更多回帖

×
20
完善资料,
赚取积分