TI中文支持网
TI专业的中文技术问题搜集分享网站

【新手】MSP430F5529 用I2C通讯时,没有SCL和SDA 波形 ,求帮助

Other Parts Discussed in Thread:MSP430F5529

I2C通信是用MSP430F5529作为主机,向外设AD5274(数字电位器)发送两个字节的数据。用的MSP430F55XX系列的例程,只有从机地址改成外设的固定地址。但是开始条件产生后,SDA和SCL都只是被拉低,没有波形的变化,一直到结束条件STP产生后,SDA和SCL空闲拉高。时钟是SMCLK,时钟源用4M的外部晶振,用IO口显示SMCLK,时钟源信号正常。想请教大家有没有碰到这种情况,问题有可能会出在哪里呢?

#include <msp430.h>

unsigned char *PTxData; // Pointer to TX data
unsigned char TXByteCtr;

const unsigned char TxData[] = // Table of data to transmit
{  0x1C,0x02  };

int main(void)
{
unsigned int i;

WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL |= 0x03; // Assign I2C pins to USCI_B0
UCB0CTL1 |= UCSWRST; // Enable SW reset
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode
UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset
UCB0BR0 = 40; // fSCL = SMCLK/40 = ~100kHz
UCB0BR1 = 0;
UCB0I2CSA = 0x2E; // Slave Address is 048h
UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation
UCB0IE |= UCTXIE; // Enable TX interrupt

while (1)
{
for(i=0;i<10;i++); // Delay required between transaction
PTxData = (unsigned char *)TxData; // TX array start address
// Place breakpoint here to see each
// transmit operation.
TXByteCtr = sizeof TxData; // Load TX byte counter

UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, start condition
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts
__no_operation(); // Remain in LPM0 until all data
// is TX'd
while (UCB0CTL1 & UCTXSTP); // Ensure stop condition got sent
}
}

//——————————————————————————
// The USCIAB0TX_ISR is structured such that it can be used to transmit any
// number of bytes by pre-loading TXByteCtr with the byte count. Also, TXData
// points to the next byte to transmit.
//——————————————————————————
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_B0_VECTOR))) USCI_B0_ISR (void)
#else
#error Compiler not supported!
#endif
{
switch(__even_in_range(UCB0IV,12))
{
case 0: break; // Vector 0: No interrupts
case 2: break; // Vector 2: ALIFG
case 4: break; // Vector 4: NACKIFG
case 6: break; // Vector 6: STTIFG
case 8: break; // Vector 8: STPIFG
case 10: break; // Vector 10: RXIFG
case 12: // Vector 12: TXIFG if (TXByteCtr) // Check TX byte counter
{
UCB0TXBUF = *PTxData++; // Load TX buffer
TXByteCtr–; // Decrement TX byte counter
}
else
{
UCB0CTL1 |= UCTXSTP; // I2C stop condition
UCB0IFG &= ~UCTXIFG; // Clear USCI_B0 TX int flag
__bic_SR_register_on_exit(LPM0_bits); // Exit LPM0
} default: break;
}
}

Susan Yang:

请您使用自己的程序,先连接示波器(而不需要挂载AD5274),然后再启动程序看看,是不是有一瞬间的波形发生,如果是那就是系统检测到线上没有设备或者悬空状态,然后就关闭了IIC。

,

Susan Yang:

另外之前有客户遇到了类似的问题,您可以参考一下

e2echina.ti.com/…/97745

,

Yang Ruo:

我在置位起始条件后,SDA SCL电平会由高到低,但是没有波形,后面还可以进行操作,然后停止条件后,两条线可以恢复到高电平,期间是一直没有波形的。就是不太理解是因为程序原因还是硬件原因导致的没有波形。因为我的上拉电阻是跳线的,会有硬件方面的影响吗?

,

Susan Yang:

若是可以的话,您可以测试下TI例程,看是否成功,从而排除硬件上的问题,如

dev.ti.com/…/node

,

Yang Ruo:

我最初就是用的MSP430F55xx_uscib0_i2c_08.c这个例程,但是SCL SDA没有波形,也没产生中断跳转,这种还是程序问题吗?

,

Susan Yang:

//******************************************************************************
//MSP430F552x Demo - USCI_B0 I2C Master TX multiple bytes to MSP430 Slave
//
//Description: This demo connects two MSP430's via the I2C bus. The master
//transmits to the slave. This is the MASTER CODE. It cntinuously
//transmits an array of data and demonstrates how to implement an I2C
//master transmitter sending multiple bytes using the USCI_B0 TX interrupt.
//ACLK = n/a, MCLK = SMCLK = BRCLK = default DCO = ~1.045MHz
//
// ***to be used with "MSP430F55xx_uscib0_i2c_09.c" ***
//
///|\/|\
//MSP430F552910k10kMSP430F5529
//slave||master
//-----------------||-----------------
//-|XINP3.0/UCB0SDA|<-|----+->|P3.0/UCB0SDAXIN|-
//|||||
//-|XOUT|||XOUT|-
//|P3.1/UCB0SCL|<-+------>|P3.1/UCB0SCL|
//||||
//
//Bhargavi Nisarga
//Texas Instruments Inc.
//April 2009
//Built with CCSv4 and IAR Embedded Workbench Version: 4.21
//******************************************************************************

您是使用2块板子测试的?是否有外接电阻?

,

Yang Ruo:

我是用的一块板子,有上拉电阻10k,没带外设和带外设的情况都试过,都没有波形产生

,

Susan Yang:

请您连接上外设且使用标准的I2C主机程序测试一下,看是否有波形

dev.ti.com/…/node

另外请参考

www.ti.com/…/slaa734a.pdf

,

Yang Ruo:

我启动程序,发送开始条件后,SDA会被拉低,SCL没有变化始终置高,这种是关闭了IIC的情况吗?

,

Susan Yang:

您可以看一下用户指南的USCI Operation – I 2C Mode

Yang Ruo 说:SDA会被拉低,SCL没有变化始终置高

这就是START开始的标志

,

Susan Yang:

另外分享一下网络上很好的I2C的分析,您可以看一下:

zhuanlan.zhihu.com/…/94195531

,

Yang Ruo:

是的,我知道这个是开始标志的正常情况,但是开始标志后SCL和SDA并没有高低电平的变换,一直保持着高电平和低电平,这种情况是什么原因呢?

,

Susan Yang:

这就是表明没有数据传输。您需要连接上从机一起测试的

参考之前的链接:zhuanlan.zhihu.com/…/94195531

2.2 电气特性无法满足

如果正常拉高、拉低的情况下,依然无法正常读取数据。通常建议,根据负载电流更换小阻值的电阻。

,

Yang Ruo:

我连接从机进行测试了,并且把上拉电阻也变成了1k,但是依旧没有数据,还会有什么其他的原因吗?TAT

赞(0)
未经允许不得转载:TI中文支持网 » 【新手】MSP430F5529 用I2C通讯时,没有SCL和SDA 波形 ,求帮助
分享到: 更多 (0)