2148974_zh-CN

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2148974_zh-CN

2148974_zh-CN

LPC8N04 I2C 不工作

我有 OM40002 开发板。

我发现的问题是,在将逻辑探针连接到 SDA 和 SCL 时,我只看到两条线都是高电平。(我使用的探头最大采样率为 48MHz)。

下面是我的代码:

#include "LPC8N04.h"

#define I2C_CLOCK (1u << 5)

int main(void) {
  // Init pins
  IOCON->PIO[0][4] = 1u; // SCL
  IOCON->PIO[0][5] = 1u; // SDA

  // Init clocks
  SYSCON->SYSCLKCTRL &= ~0b1110u; // SYSCLKDIV = 0 => 8MHz
  SYSCON->SYSCLKUEN &= ~1u;       // Update system clock source
  SYSCON->SYSCLKUEN |= 1u;
  SYSCON->WDTCLKDIV = 1;
  SYSCON->SYSAHBCLKCTRL |= I2C_CLOCK;

  SYSCON->PRESETCTRL |= 0b10;
  I2C0->CONCLR = 0b01101100;
  I2C0->SCLH = 80; // 8 MHz / 80 = 100 kHz
  I2C0->SCLL = 80;
  I2C0->CONSET = 0b01000000; // I2EN

  I2C0->CONSET = I2C0_CONSET_STA_MASK;          // START
  while (!(I2C0->CONSET & I2C0_CONSET_SI_MASK)) // Wait
    ;
  I2C0->DAT = 0xAE;                             // Send slave addr
  while (!(I2C0->CONSET & I2C0_CONSET_SI_MASK)) // Wait
    ;
  I2C0->CONCLR |= (1 << 3);
  while (!(I2C0->CONSET & I2C0_CONSET_SI_MASK)) // Wait
    ;

  while (1) {
  }
}

调试结果表明,程序在倒数第二个 while 循环(就在 CONCLR 之后)上永远旋转着

我将板一分为二,并将6个调试引脚连接在两半之间,因为我认为与LED阵列的连接可能会导致问题。

我通过上拉电阻将 P4-1(PIO0_4/SCL)和 P4-3(PIO0_5/SDA)连接到 P4-5(VCC)。

我试过从 1k 到 100k 的上拉电阻,结果都一样。

我尝试过在连接和不连接从属设备的情况下都运行。

我尝试过的任何方法都无法在 SDA 或 SCL 上产生任何输出。

我尝试了多种编译和闪烁代码的方法,包括在 mcuexpresso 中创建一个新项目,使用默认选项,然后将 main 方法更改为上述方法。

Re: LPC8N04 I2C not working

你好@橙色茶蛙

感谢您的提问。

我建议你先运行开发工具包中包含的 I2C 演示板。确认它能正常运行,这将有助于验证您的板没有问题。然后,根据您的具体要求对演示进行修改。

Alice_Yang_0-1754649011923.png


如果您还有其他问题,请告诉我。

谢谢!

BR

爱丽丝

标记 (1)
无评分
版本历史
最后更新:
‎11-20-2025 03:18 PM
更新人: