This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我正在尝试使 TMS570LS12x Hercules 开发套件(HDK)(TMS570LS1227ZWT)上的 I2C 正常工作、但无法成功。 SPI/SCI/CAN/etc。 正常工作、但我无法使 I2C 正常工作。
我的硬件设置:
MCP23017 I/O 扩展器连接到 HDK。
J11上的 SCL 连接引脚71 (ZWT 上的引脚 C3)
SDA 连接到 J11上的引脚72 (ZWT 上的引脚 B2)
MCP23017位于试验电路板上并提供3.3V (VDD)! RESET 也连接到3.3V。
GND (MCP23017上的 VSS)连接到试验电路板电源和 HDK (GND)上 J11的引脚80。 有一个公共接地。
SDA 和 SCL 上都有2kB 上拉至3V3。 MCP23017上的地址引脚均连接到 GND、因此从器件地址应为0x20。
我给 SCL 和 SDA 线都连接了一个示波器。
我使用 HALCOGEN 配置了项目、如下所示:
我的代码:
int main(void) { /* USER CODE BEGIN (3) */ uint16 MCP23017_ADDRESS = 0x20; uint8 IODIRA = 0x00; i2cInit(); i2cSetSlaveAdd(i2cREG1, MCP23017_ADDRESS); i2cSetDirection(i2cREG1, I2C_TRANSMITTER); i2cSetMode(i2cREG1, I2C_MASTER); i2cSetStop(i2cREG1); i2cSetStart(i2cREG1); i2cSendByte(i2cREG1, IODIRA); while(i2cIsBusBusy(i2cREG1)); while(!i2cIsStopDetected(i2cREG1)); i2cClearSCD(i2cREG1); /* USER CODE END */ return 0; }
代码在 whule i2cIsBusy()上挂起。
程序启动时、SCL 和 SDA 都为高电平。 当我在 i2cSetStart ()之后设置一个断点时,我看到 SCL 和 SDA 都被拉低(0V)(???)。 在 i2cSendByte 期间、我看到 SDA 在短时间内变为高电平(3.3V)、然后返回到低电平。 SCL 保持低电平。 我没有看到任何时钟脉冲。
有什么想法我做错了什么?
非常感谢任何帮助!
谢谢。
文森特
您好、Vincent:
我觉得您的设置和地址(0x20)看起来是正确的。
我唯一怀疑的是、您在发送数据字节之前未初始化 i2cCNT 寄存器
您应该调用以下 API 来执行该操作:
我还要附加经过测试的 i2c 示例供您参考、请浏览。
e2e.ti.com/.../3073.I2C_5F00_Master_5F00_RM46L852.zip
e2e.ti.com/.../5040.I2C_5F00_TEST_5F00_LC43.zip
--
谢谢。此致、
Jagadish。
感谢 Jagadish、
它确实是未正确设置的 i2cCNT 寄存器。 这周我一直在编写代码、并使用重复的启动条件实现了 I2C。 进行大量的调试、 但现在可以与 MCP23017芯片完美地通信。
谢谢!
文森特