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.

[参考译文] CCS/MSP430F5529:I2C与Lidar Lite v3通信

Guru**** 2587345 points
Other Parts Discussed in Thread: MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/618045/ccs-msp430f5529-i2c-communication-with-lidar-lite-v3

部件号:MSP430F5529
主题中讨论的其他部件: MSP430WARE

工具/软件:Code Composer Studio

你好,

我将浏览MSP430Ware驱动程序库示例,以了解I2C如何与MSP430F5529启动板配合使用。 我已将27kOhm上拉电阻连接到引脚3.0 和3.1 (UCB.S.和UCB0SDA)。 但是,当我运行下面显示的代码时:

/*--版权--,BSD
*版权所有(c) 2016,Texas Instruments Incorporated
*保留所有权利。
*
**
允许以源代码和二进制格式重新发布和使用,无论是否进行*修改,只要
满足以下条件*:
*
****重新发布源代码必须保留上述版权
*声明,此条件列表和以下免责声明。
*
***以二进制格式重新分发时,必须在

随分发提供的*文档和/或其他材料中复制上述版权*声明,此条件列表和以下免责声明。
*
***

未经事先书面许可,不得使用德州仪器(TI)公司的名称或*其贡献者的名称来支持或促销由本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*,

不提供任何明示或暗示的担保,包括但不限于*对适销性和特定*用途适用性的暗示担保。 在任何情况下,版权所有者或
*贡献者均不对任何直接,间接,附带,特殊,
*示范, 或后果性损害(包括但不限于
*购买替代商品或服务;使用,数据或利润损失;
(*或业务中断),但根据任何责任理论
,*无论是合同,严格责任还是侵权行为(包括疏忽或
*其他),均因使用本软件而导致*
,即使已被告知此类损害的可能性。
*--/copyright--*/
#include "driverlib.h"//*********************************************************************************************************


//! 此示例显示如何将I2C模块配置为
//! 中断模式下的单字节传输。 从属
设备的地址//! 与主中继器通信的模块也在本示例中设置。
//!
//! 本示例使用以下外围设备和I/O信号。 你必须
//! 查看这些内容并根据需要对您自己的主板进行更改:
//! - I2C外设
//! - GPIO端口外设(用于I2C引脚)
//! - SCL2
//! - SDA
//!
//! 此示例使用以下中断处理程序。 要使用此示例
//! 在您自己的应用程序中,您必须将这些中断处理程序添加到
您的//! 引导程序表。
//! - USI_B0_Vector。
//!
////*************************************************************************************************

//*************************************************************************************************
////
设置从属模块的地址。 这是以
///以下格式发送的7位地址:
//[A6:A5:A4:A3:A2:A1:A0:RS]
////
第一个字节"RS"位置中的零表示主//
向所选从属设备传输(发送)数据,在此位置
的一个//表示主设备从从属设备接收数据。
////*************************************************************************************************

#define slaver_address 0x62 //LIDAR Lite v3从属地址

uint8_t传输数据;

void main(void){

//停止WDT
WDT_A_HOLD (WDT_A_BASE);

//将I2C引脚分配给USI_B0
GPIO_setAsPeripheralModuleFunctionInputPin (
GPIO端口P3,
GPIO _PIN0 + GPIO _PIN1
);

//初始化传输数据包
传输数据= 0x00;

//初始化主中继器
USI_B_I2C_initMasterParam ={0};
param.selectClockSource = USI_B_I2C_CLOCKSOURCE_SMCLK;
PARAM.i2cClk = UCS_getSMCLK();
Param.datarate = USI_B_I2C_SET_DATA_RATE_400KBPS;
USI_B_I2C_INITMaster (USI_B0_BASE,&param);

//指定从属地址
USI_B_I2C_setSlaveAddress (USI_B0_BASE,
Slaver_address
);

//在传输模式下设置
USI_B_I2C_setMode (USI_B0_BASE,
USI_B_I2C_Transmit_mode
);

//启用I2C模块以启动操作
USI_B_I2C_ENABLE (USI_B0_BASE);

//启用TX中断
USI_B_I2C_clearInterrupt (USI_B0_BASE,
USI_B_I2C_Transmit_Interrupt
);
USI_B_I2C_enableInterrupt (USI_B0_BASE,
USI_B_I2C_Transmit_Interrupt
);

同时(1)
{
//发送单字节数据。
USI_B_I2C_masterSendSingleByte (USI_B0_BASE,
传输数据
);

//延迟到传输完成
while (USI_B_I2C_isBusy (USI_B0_BASE))
{
;}


//每个事务之间的延迟
__DELAY周期(50);

//增量传输数据计数
器}
}//**************************************************************************************************************


//
//这是USI_B0中断向量服务例程。
////************************************************************************************************

#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_ICC__)
#pragma vector=USI_B0_vector
__interrupt
#Elif defined(__Gnu___)
__attribute__((interrupt (USI_B0_vector))
#endif
void USI_B0_ISR(vector))
{
SWITCH(__EIV_IN_RANGE(UCB0IV,12))
{
//矢量12:传输缓冲区为空- TXIF
案例USI_I2C_UCTXIFG:
{
__no_operation();
中断;
}
默认值:break;
}
}

然后,它在USSCI_b_i2c.c中的以下代码中挂起:

//传送中断标志轮询。
while (!(HWREG8 (baseAddress + OFS_UCBxIFG)& UCTXIFG))
{
;}



我读过其他线程,但它们不能帮助我解决问题。 当我检查示波器上的针脚时,它们在3.3V电压下一直保持高。 它们永远不会降低。 我尝试了其他示例,出现了相同的问题,代码将在USSCI_b_i2c.c中挂起

我在上面的代码中唯一更改的是从地址0x48到0x62,因为这是具有内部3kOhm电阻器的LIDAR Lite v3传感器的从地址。 如果能够从传感器获取读数,或者甚至让I2C发出一个简单的开始字节,我们将非常感激。

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

    您是否尝试过按照预期使用MSP430F5529从属设备和10千欧上拉电阻器测试代码? 如何使用C示例而不是DriverLib? 您将无法与LIDAR-Lite v3传感器通信,除非您使用双向电平转换器来补偿电压差(3.3 与5 V), 尽管这会让人感到困惑,因为Lidar的I2C总线在总线升至5V之前在内部以3.3 V运行。如果Lidar已经提供了必要的电阻,则不应添加额外的上拉。

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

    您好,Ryan:

    从我的基本理解来看,没有必要进行水平调整。 我测量了来自Lidar Lite v3的SCL和SDA线路的输出电压,它们都输出3.3 V,与MSP430F5529LP板上的SCL和SDA引脚相同。

    我尝试在没有附加上拉电阻器的情况下与传感器通信,但代码仍然在我在原始帖子中突出显示的部分挂起,我不知道原因。 它甚至不会传输起始字节。 当UCTXIFG设置为1时,它会卡住,表示TX缓冲区为空,准备接收更多数据,但它会无休止地循环。 微控制器没有任何输出。 正如我前面所说的,SDA和SCL线在3.3 V时始终保持高,从不会降低到表示已发送起始位。

    至于在C语言中进行编码,我对所需的注册表级别编辑没有适当的了解。 我是一名时间有限的学生,因为我完成了目前正在处理的项目,所以driverslib库对我的需求至关重要

    其他人设法使示例代码正常工作,我只是想知道为什么我的微控制器在使用示例代码时甚至不发送起始位,更不用说发送整个字节。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果其他人有解决方案,那么您最快的答案是观察他们的设置(硬件和软件)并将其与您自己的设置进行比较。

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

    我已经看过其他的实施,我不知道什么是错误的,因为我使用的代码与它们完全相同,它们的上拉电阻从WFP 3.0 和WFP 3.1 连接到3V3引脚Vcc。

    您是否至少能够告诉我我PIN设置是否正确? 原始示例使用端口3上的引脚1和2 (WFP 3.1 和WFP 3.2)。 我将其更改为端口3.0 和3.1 ,因为那是SDA和SCL引脚。 这也许是我的错误吗? 以下是MSP430F5529LP引脚输出,以说明:  

    我是否应该改用PIN 4.1 和4.2 ? 我真正和诚实地想要的就是越过我前面所说的在循环中的悬垂。
    明天我在实验室时,我将尝试按预期将示例放在一起。  

    同样,我的问题是主板甚至不会输出一个带有地址的起始字节。 它被卡在这个循环中。 这就是我现在想要解决的所有问题,为什么它会被困在这里? 它不会在SDA或SCL引脚上输出任何内容。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您不应该因为DriverLib选择轮询标志的原因而使用USI_B0 TXIFG ISR。 这可能导致您遇到的问题,请尝试代码而不设置TXIE位。 此流程未在提供的单个转移示例中演示,您采购的DriverLib版本和具体示例编号是什么?

    此致,
    Ryan