查看: 1135|回复: 2

[求助] KE06 IIC模块问题

[复制链接]

该用户从未签到

2

主题

6

帖子

0

新手上路

Rank: 1

积分
34
最后登录
2021-1-22
发表于 2020-12-1 09:28:12 | 显示全部楼层 |阅读模式
各位大侠,
     用例程调试了两天IIC,一直没通,是要换成模拟的吗,求指教。


void InitI2C(void)
{
//外部已上拉
  
/*
   * masterConfig->baudRate_Bps = 100000U;
   * masterConfig->enableStopHold = false;
   * masterConfig->glitchFilterWidth = 0U;
   * masterConfig->enableMaster = true;
   */  
I2C_MasterGetDefaultConfig(&masterConfig);
masterConfig.baudRate_Bps = I2C_BAUDRATE;

I2C_MasterInit(I2C0, &masterConfig, I2C_MASTER_CLK_FREQ);
}

我知道答案 目前已有2人回答
回复

使用道具 举报

该用户从未签到

2

主题

6

帖子

0

新手上路

Rank: 1

积分
34
最后登录
2021-1-22
 楼主| 发表于 2020-12-1 09:30:16 | 显示全部楼层
void I2CWriteData(uint16_t start_e2paddr, uint16_t start_paraddr, uint8_t num)
{
uint8_t read_val;
uint8_t i;
uint16_t chktmp = 0xFFFF;


//先对结构体清零操作
  memset(&masterXfer, 0, sizeof(masterXfer));
  /* subAddress = 0x01, data = g_master_txBuff - write to slave.
    start + slaveaddress(w) + subAddress + length of data buffer + data buffer + stop*/
  uint8_t deviceAddress     = 0x01U;
  masterXfer.slaveAddress   = I2C_MASTER_SLAVE_ADDR_7BIT;
  masterXfer.direction      = kI2C_Write;
  masterXfer.subaddress     = (uint32_t)deviceAddress; //start_e2paddr
  masterXfer.subaddressSize = 1;
  masterXfer.data           = g_master_txBuff; //
  masterXfer.dataSize       = I2C_DATA_LENGTH;
  masterXfer.flags          = kI2C_TransferDefaultFlag;
  I2C_MasterTransferBlocking(I2C0, &masterXfer);
}

/* FUNCTION ************************************************************************************************************
*
* Function Name : I2CWriteData
* Description   :
*
* END ****************************************************************************************************************/
uint8_t I2CReadData(uint16_t start_e2paddr, uint16_t start_paraddr, uint8_t num)
{
uint8_t read_val;
uint8_t i;
uint16_t chktmp = 0xFFFF;
  
/* Wait until the slave is ready for transmit, wait time depend on user's case.
Slave devices that need some time to process received byte or are not ready yet to
send the next byte, can pull the clock low to signal to the master that it should wait.*/
for (uint32_t i = 0U; i < WAIT_TIME; i++)
{
  __NOP();
}
/* subAddress = 0x01, data = g_master_rxBuff - read from slave.
  start + slaveaddress(w) + subAddress + repeated start + slaveaddress(r) + rx data buffer + stop */
masterXfer.slaveAddress  = I2C_MASTER_SLAVE_ADDR_7BIT;
masterXfer.direction   = kI2C_Read;
masterXfer.subaddress   = 0x01U;
masterXfer.subaddressSize = 1;
masterXfer.data      = g_master_rxBuff;
masterXfer.dataSize    = I2C_DATA_LENGTH - 1U;
masterXfer.flags     = kI2C_TransferDefaultFlag;

I2C_MasterTransferBlocking(I2C0, &masterXfer);
//I2C_MasterReadBlocking(I2C0, g_master_rxBuff, num, read_iic_flag);

retrun(0);
}

回复 支持 反对

使用道具 举报

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
19941
最后登录
2024-4-19
发表于 2020-12-3 14:09:40 | 显示全部楼层
你先用逻辑分析仪抓一下波形,看看时序对不对,Ack有没有,找到问题的点,然后再根据这个去代码中找问题。官方SDK也可以用来试一试。


slogen.png



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-4-20 03:03 , Processed in 0.133645 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表