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.

[参考译文] MSP430FR2355:I2C 主设备

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/795172/msp430fr2355-i2c-master

器件型号:MSP430FR2355

我在 FR2155上为 I2C 主设备编写了代码、效果良好。

我在另一个 fr2355中使用该代码、现在它不起作用。

开始条件行时的电压

   UCB1CTLW0 |= UCTR + UCTXSTT;            // I2C TX,启动条件

,不发出启动条件(用范围检查)

我还对引脚进行了手动测试(写入端口寄存器)、以查看硬件是否已连接。

GIE 和 UCB1TXIE 为1"

有什么想法吗?

感谢你的帮助

此致

Kurt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您能否使用示波器布置波形?
    您是否使用了上拉电阻器?
    伊斯天
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、伊斯天、

    示波器在信号 SDA 和 SCL 上显示3.3V、直线

    两个信号都具有10k 上拉电阻

    此致
    Kurt
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您是否与我们的示例代码进行了比较?
    如果您仍然无法解决问题、请发布您的代码。
    伊斯天
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、伊斯天、

    很奇怪、我用了一个旧版本的硬件、软件是相同的、可以正常工作。


    这是该模块的初始化代码

    void Init_master (void){
    MasterMode = MASTER_IDLE;
    UCB1CTLW0 = UCSWRST; //将 eUSCI_B 置于复位状态
    UCB1CTLW0 |= UCMODE_3 ++UCSYNC + UCMST + UCSSEL1 + UCSSEL0; // I2C 主控模式
    UCB1BRW = 0x5A; // 0x5A 脉冲宽度 H 或 L >4.7us!
    UCB1CTLW0 &=~UCSWRST; // eUSCI_B 处于运行状态
    UCB1IE |= UCNACKIE;



    这是 TX 代码

    void I2C_Master_ReadReg (无符号字符 DEV_addr、\
    unsigned char reg_addr、\
    unsigned char 计数、
    unsigned char * pData、\
    I2C_Callback Sub){
    while (!(MasterMode = MASTER_IDLE)); //等待 I2C 就绪
    MasterMode = TX_REG_ADDRESS_MODE; //初始化状态机
    MasterTransmitRegAddr = reg_addr; //寄存器地址以开始读取
    MasterRXByteCtr =计数; //要读取的字节数
    pMasterRXDATA = pData; //将指针设置为接收缓冲区
    RXFunc = Sub; //函数在接收到字节后运行
    UCB1I2CSA = DEV_addr; //设置从器件地址
    MasterTXByteCtr = 0;
    UCB1IFG &=~(UCTXIFG + UCRXIFG); //清除所有挂起的中断
    UCB1IE &=~UCRXIE; //禁用 RX 中断
    UCB1IE |= UCTXIE; //启用 TX 中断
    UCB1CTLW0 |= UCTR + UCTXSTT; // I2C TX、启动条件




    在新的 PCB 上、一旦 UCSWRT 变为低电平、UCB1STATW 寄存器中的 UCBBUSY 就会被置位。 我假设当 UCBBUSY 位为高电平时、您无法发送任何起始/停止或字节?

    在旧 PCB 上、UCBBUSY 仅在 UCB1CTLW0 |= UCTR + UCTXSTT 线路后变为高电平

    我认为芯片有问题吗???? =全新开箱即用! 我把它焊接了、可能太热了?

    感谢你的帮助
    Kurt
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、伊斯天、

    另一种可能:

    受控器件的 GND 未连接、它本来可以在 I2C 总线上施加~7V 的电压、我确信这会损坏引脚。

    我的问题是:
    如果引脚在 I2C 模式下断开(P4SEL0 = 1)、它们是否仍能像它们一样作为 IO (P4SEL0 = 0)工作?

    此致
    Kurt
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    1.我不确定。 很难判断该引脚是否仍然可以工作、因为您的规格太高。

    2.我建议你试一下。

    伊斯天

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    伊斯天

    重新焊接从设备并更换 MSP430解决了该问题。

    此致
    Kurt