This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

nRF51 MPU9255 SPI READ Failed

Hi all:

I wrote a code to directly read the register 0x43 (MPU_REG_GYRO_XOUT_H) But the GYRO data I got is wrong

Chip: nRF51422

Board: PCA10028

Firmware: S130_nRF51_2.0.1

nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG(SPI_INSTANCE);
spi_config.ss_pin = 4;
spi_config.sck_pin = 1;
spi_config.mosi_pin = 2;
spi_config.miso_pin  = 3;
spi_config.bit_order = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST;
APP_ERROR_CHECK(nrf_drv_spi_init(&spi, &spi_config, spi_event_handler));

I plugged my SPI device to P0.01~P0.04 on board, and MOSI/MISO swap has been tried but nothing changed.

  for (;;)
  {
        // Reset rx buffer and transfer done flag
        memset(m_rx_buf, 0, 7);
        spi_xfer_done = false;
    
        m_tx_buf = m_tx_buf | MPU_SPI_READ_BIT;   //m_tx_buf = 0x43,  MPU_SPI_READ_BIT = 0x80
        err_code = nrf_drv_spi_transfer(&spi, &m_tx_buf, 1, m_rx_buf, 7);
        //printf("%d\n",err_code);
        //printf("%d\n",sizeof(m_rx_buf));
    			  
        uint8_t *data;
        data = (uint8_t*)m_rx_buf;
        for(uint8_t i = 0; i<6; i++) {
            *data = m_rx_buf[5-i];
            data++;
        }
    			
    			
        int16_t gxc, gyc, gzc;
        if(!err_code){
    					 
    		gxc = ((int16_t)m_rx_buf[0] << 8) | (int16_t)m_rx_buf[1];
    		gyc = ((int16_t)m_rx_buf[2] << 8) | (int16_t)m_rx_buf[3];
    		gzc = ((int16_t)m_rx_buf[4] << 8) | (int16_t)m_rx_buf[5];
        }
        printf("%d\n",gxc);
        printf("%d\n",gyc);
        printf("%d\n",gzc);

        LEDS_INVERT(BSP_LED_1_MASK);
        nrf_delay_ms(100);
        power_manage();
  }

I got gxc, gxy, gxz showed -1 in uart

((int16_t)m_rx_buf[0] << 8) showed 65280 in uart (int16_t)m_rx_buf[1]; showed 255 in uart

so as m_rx_buf[2],m_rx_buf[3],m_rx_buf[4],m_rx_buf[5]

I have tried github.com/.../nrf5-ble-mpu-simple And I can't get the correct result, too.

My MPU9255 Module can run on NVIDIA TX1 correctly with RTIMULIB. Did I miss something or did I do something wrong?

Parents
  • I solved it. It was wrong because my MPU9255 was connected to 5V. The chip select Pin is also 5V, and this cause the CS pin can't draw the voltage down to 0V. I measured 3V on the CS pin when connected, and 0V when CS pin unconnected.

Reply
  • I solved it. It was wrong because my MPU9255 was connected to 5V. The chip select Pin is also 5V, and this cause the CS pin can't draw the voltage down to 0V. I measured 3V on the CS pin when connected, and 0V when CS pin unconnected.

Children
No Data
Related