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.

[参考译文] MSP430FR2476:Eusc12B 作为 I2C 外设不工作

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/929872/msp430fr2476-euscib-as-i2c-peripheral-not-working

器件型号:MSP430FR2476

大家早上好、

我并不是 MSP430领域的新手、作为嵌入式固件编程人员、我有着相当好的体验。 Driverlib 是我以前在 MSP430方面的经验中的一个新东西、和  

我觉得这是一个很棒的工具……一旦我能使它工作…

我只是添加了这个内容,这样一旦问题得到解决,我就会更像一个傻瓜:)。

我的问题是、我需要开发一个非常简单的项目、其中的传感器通过 I2C 连接到 MSP430器件、CPU 会定期读取该值。

到目前为止都很好……我想。 我订购了2个 MSP430开发套件、阅读了 driverlib 文档、并决定使用 I2C 示例作为参考。 示例中使用的 MSP 为

FR4133、但我认为区别在于端口和引脚配置。

为了简短地讲述长故事、我从几天以来一直在努力让 I2C 正常工作! 无论我尝试什么、我的逻辑分析仪上始终没有任何东西、这都让我疯了!

现在、我可以想象的配置是最简单的:我通过 USB 将开发板连接到 PC、我的逻辑分析仪连接到 Eusci_B0引脚、这是应该的

要用作 I2C (1.3和1.2)、我运行下面的基本代码

#include "driverlib.h"

volatile uint8_t transmitData;

int main (void){



WDT_A_HOLD (WDT_A_base);

GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_P1、
GPIO_PIN2 + GPIO_PIN3、
GPIO_PRIMARY_MODULE_FUNCTION
);


PMM_unlockLPM5 ();
//初始化主设备
EUSCI_B_I2C_initMasterParam param ={0};
param.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK;
param.i2cClk = CS_getMCLK ();
param.datarate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS;
param.byteCounterThreshold = 1;
param.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP;
EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、param);

//指定从器件地址
EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、
0x48
);

//设置为发送模式
EUSCI_B_I2C_setMode (EUSCI_B0_BASE、
EUSCI_B_I2C_Transmit 模式
);

//启用 I2C 模块以启动操作
EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE);
transmitData = 1;
while (1)
{

//发送单字节数据。
EUSCI_B_I2C_masterSendSingleByte (EUSCI_B0_BASE、
传输数据
);

//延迟直到传输完成
while (EUSCI_B_I2C_isBusBusy (EUSCI_B0_BASE));

//每次传输之间的延迟
_DELAY_CYCLES (50);

//递增发送数据计数器
transmitData++;
}

返回(0);
} 

我希望在逻辑分析仪上看到一些东西、但信号永远不会移动(是的、我仔细检查了分析仪 works....it)。

所以,我的问题是……这里有什么问题? 我已经尝试了示例代码(singleTX、multipleSlaves 等),我已经尝试了第二块板,我尝试了所有可能的时钟系统配置和时钟源… 始终是相同的问题。 out_for_box 示例工作正常、我还能够在板 LED 上闪烁并将引脚移至高/低... 但 I2C 无法正常工作!

请,有人给我指出正确的方向来理解这种奇怪的… 我缺少什么??

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

    就像其他信息一样...我阅读了关于常见问题的 AN,并尝试运行 i2c_standard_master.c 建议的示例,该示例不使用 driverlib..... 仍然不幸运、引脚上没有活动迹象。

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

    我的第一个猜测是上拉电阻器--你的分析仪是否显示引脚状态为高电平或低电平? Launchpad 不提供上拉电阻。 一些传感器分线板为上拉电阻器供电。

    在紧急情况下、您可能会成功使用内部上拉电阻器、例如:

    > GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P1、GPIO_PIN2 | GPIO_PIN3);

    在 setAssPeripheralModule 调用之前执行此操作。 在最坏的情况下、此调用不会伤害任何东西。

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

    当然、就是这样。

    我不知道为什么(我想我不在任何地方读),但我认为这是在 setAsPeripheralModule 调用中得到了处理。。。
    这解决了第一个问题、现在我可以在线路上看到第一个通信。  

    我现在还有另一个问题,但我想我将开始单独的讨论。

    非常感谢您的帮助!

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

    内部上拉电阻不是很强、因此您可能需要降低 I2C 的速度(可能是100kHz)。 并使导线保持相当短的距离。