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.

MSP430G2553: SPI on msp430g2553 using MPU6050 slave

Part Number: MSP430G2553

#include <msp430.h>
#include <stdlib.h>
#include <stdio.h>

unsigned char MST_Data;
unsigned char SLV_Data;
/**
* main.c
*/
int main(void)
{

WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
P1OUT |= BIT5;
P1DIR |= BIT5;
P1SEL = BIT1 | BIT2 | BIT4;
P1SEL2 = BIT1 | BIT2 | BIT4;
UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit SPI master
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 |= 0x02; // /2
UCA0BR1 = 0; //
UCA0MCTL = 0; // No modulation
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI0 RX interrupt
P1OUT &= ~BIT5; // Now with SPI signals initialized,
P1OUT |= BIT5; // reset slave
__delay_cycles(75); // Wait for slave to initialize

MST_Data = 0x01; // Initialize data values
SLV_Data = 0x00;
UCA0TXBUF = MST_Data; // Transmit first character

__bis_SR_register(LPM0_bits + GIE); // CPU off, enable interrupts
}
// Test for valid RX and TX character
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCIA0RX_ISR(void)
{
volatile unsigned int i;

while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?

if (UCA0RXBUF == SLV_Data) // Test for correct character RX'd
P1OUT |= BIT0; // If correct, light LED
else
P1OUT &= ~BIT0; // If incorrect, clear LED

MST_Data++; // Increment master value
SLV_Data++; // Increment expected slave value
UCA0TXBUF = MST_Data; // Send next value

__delay_cycles(50); // Add time between transmissions to
} // make sure slave can keep up

So I am testing this MPU6050 accelerometer as an spi slave to my msp430g2553 micro controller and i tried to use the above code to test the SPI connection. upon running the code the tx registry data increments until reaching some hex limit, but the rx registry doesn't change from 0xff. the forum post on this website i found the majority of the above code on had an answer that mentioned slaves returning a 0xff value as an idle value but didn't address what to do when this happens. any help would be appreciated 

  • Hi Paul,
    I took a quick look at the MPU6050 documents, and it says the 6050 only supports I2C. So I'm not sure what your connecting MISO to....

    In case this was a typo and your using MPU6000, you are not setting the read bit. I also noticed you are not initializing the device to use SPI, it appears that it defaults to i2c. Lastly, you are constantly sending addresses without sending a dummy byte for the read. I'm not sure what this will do, unless this is what they mean by burst read on SPI.

    I'd recommend taking a look at this project I found on Github as reference for how to communicate with the MPU: github.com/.../MPU6000-Datalogger

    If you are using the MPU6050, I did a quick google search for MPU6050 MSP430, and multiple projects came up.
  • Ah you're completley right, i had found that data sheet earlier but the PI was insisting on using this sensor for SPI so i for some reason assumed it would work or maybe it was the mpu6000 but after getting a magnifying glass and squinting at it from multiple angles i see i had the wrong sensor. Thank you for the response.

**Attention** This is a public forum