主题中讨论的其他器件: MSP430G2553
工具/软件:Code Composer Studio
您好!
i2c 主器件卡在连接到 MSP430G2553 i2c 从器件的 MSP430F5505 i2c 主器件之间的总线忙线上。
如何重现问题:
- 关闭两块板的电源。
- 为 MSP430G2553 I2C 从器件加电。
- 为 MSP430F5505 i2c 主器件加电。
- 复位 MSP430G2553、或者有时使其保持运行、一段时间后、它将失败。
MSP430F5505仅传输单字节、它使用 MSP430_driverlib_2_91_13_01。
请参阅下面的良好数据包:
当发生故障时、会发生以下情况:
最后一个数据包:
此时、时钟保持低电平、器件卡在总线忙状态。
在文档中、它指定了总线忙位在 START 条件下设置为 START 条件、在 END 条件下删除。 我已经尝试过超时并再次发送、但时钟保持低电平、并且将再次失败。
请参阅 以下 MSP430F5505硬件设计:
从器件使用 MSP-EXP43-G2、同时断开调试器贴片引脚并移除 LED2贴片引脚。 我已经测试了3.3V 和0v 两端的电压。
我的另一个问题是时钟有时会执行以下操作:
主控 i2c 代码:
uint8_t transmitData = 0x01; void hw_i2c_master_init (void) { //为 I2C 配置引脚 //将 P4.1和 P4.2设置为辅助模块功能输入。 receiveBufferPointer =&receiveBuffer; // *选择端口4 *设置引脚1、2以输入辅助模块函数 */ GPIO_setAsModuleFunctionInputPin ( GPIO_PORT_P4、 GPIO_PIN1 + GPIO_PIN2 ); //初始化主 USCI_B_I2C_USCI_USCI_USCI_USCI_USCI_CLB ={0_USCI_USCI_param_USCI_USCI_param_param_u_u_u_param_param_u_u_u_u_clk_param_u_u_u_clk_u_param_param_u_u_u_u_u_u_clk_clk_u_u_u_param_u_u_u_ param.selectClockSource 1)¶m; //指定从地址 USCI_B_I2C_setSlaveAddress (USCI_B1_BASE、 SLAVE_ADDRESS ); //设置接收模式 USCI_B_I2C_setMode (USCI_B1_BASE、USCI_B2_I2C_Transmit); //启用 I2C 模块以启动操作 USCI_B1_USCI_USCI_USCI_USCI_DB1 (USCI_USCI_USCI_USCI_USCI_USCI_USCI_UST_B1_BASE )、USC_USCI_USCI_USCI_USCI_USCI_USCI_USCI_UST_SEND (USCI_USCI_USCI_UST_USCI_UST_USCI_USCI_USCI_USCI_USCI_USCI_USCI_UST_USCI_USCI_USCI_UST_UST_UST_UST_USCI_UST_UST_USCI_USCI_USCI_USCI_UST_USCI_UST_UST_UST_UST_USCI_UST_UST_USCI_ USCI_B_I2C_masterSendSingleByteWithTimeout (USCI_B1_base、 transmitData、timeout ); } //在 传输完成(timeout--){ if (!USCI_B_I2C_isBusBusBusy (USCI_B1_base)){ break; } } }}
i2c 从设备代码:
1) 1)恢复应如何工作?
2) 2)导致此故障的原因是什么?如何避免此故障?
非常感谢、
Jon