Discuz! Board

标题: 用dmp读四元数加载固件失败 [打印本页]

作者: kallyshall    时间: 2016-3-22 21:53
标题: 用dmp读四元数加载固件失败
本帖最后由 kallyshall 于 2016-3-22 21:58 编辑

int dmp_load_motion_driver_firmware(void)
{
    return mpu_load_firmware(DMP_CODE_SIZE, dmp_memory, sStartAddress,
        DMP_SAMPLE_RATE);
}
这个函数出错导致的加载失败……求助!
原始数据可以正常读出来
作者: admin    时间: 2016-3-23 19:43
这个代码你自己写么?代码贴出来分析一下
作者: kallyshall    时间: 2016-3-24 21:06
本帖最后由 kallyshall 于 2016-3-24 21:08 编辑
admin 发表于 2016-3-23 19:43
这个代码你自己写么?代码贴出来分析一下
  1. uint8_t mpu_dmp_init(void)
  2. {
  3.           twi_master_init();
  4.           mpu_init(0);
  5.           //mpu_init();
  6.           simple_uart_putstring("mpu initialization complete......\n ");
  7.           //mpu_set_sensor
  8.           if(!mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL))
  9.           {
  10.                    simple_uart_putstring("mpu_set_sensor complete ......\n");
  11.           }
  12.           else
  13.           {
  14.                    simple_uart_putstring("mpu_set_sensor come across error ......\n");
  15.           }
  16.           //mpu_configure_fifo
  17.           if(!mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL))
  18.           {
  19.                    simple_uart_putstring("mpu_configure_fifo complete ......\n");
  20.           }
  21.           else
  22.           {
  23.                    simple_uart_putstring("mpu_configure_fifo come across error ......\n");
  24.           }
  25.           //mpu_set_sample_rate
  26.           if(!mpu_set_sample_rate(DEFAULT_MPU_HZ))
  27.           {
  28.                    simple_uart_putstring("mpu_set_sample_rate complete ......\n");
  29.           }
  30.           else
  31.           {
  32.                    simple_uart_putstring("mpu_set_sample_rate error ......\n");
  33.           }
  34.           //dmp_load_motion_driver_firmvare
  35.           if(!dmp_load_motion_driver_firmware())
  36.           {
  37.                   simple_uart_putstring("dmp_load_motion_driver_firmware complete ......\n");
  38.           }
  39.           else
  40.           {
  41.                   simple_uart_putstring("dmp_load_motion_driver_firmware come across error ......\n");
  42.           }
  43.           //dmp_set_orientation
  44.           if(!dmp_set_orientation(inv_orientation_matrix_to_scalar(gyro_orientation)))
  45.           {
  46.                    simple_uart_putstring("dmp_set_orientation complete ......\n");
  47.           }
  48.           else
  49.           {
  50.                    simple_uart_putstring("dmp_set_orientation come across error ......\n");
  51.           }
  52.           //dmp_enable_feature
  53.           if(!dmp_enable_feature(DMP_FEATURE_6X_LP_QUAT | DMP_FEATURE_TAP |
  54.                 DMP_FEATURE_ANDROID_ORIENT | DMP_FEATURE_SEND_RAW_ACCEL | DMP_FEATURE_SEND_CAL_GYRO |
  55.                 DMP_FEATURE_GYRO_CAL))
  56.           {
  57.                    simple_uart_putstring("dmp_enable_feature complete ......\n");
  58.           }
  59.           else
  60.           {
  61.                    simple_uart_putstring("dmp_enable_feature come across error ......\n");
  62.           }
  63.           //dmp_set_fifo_rate
  64.           if(!dmp_set_fifo_rate(DEFAULT_MPU_HZ))
  65.           {
  66.                    simple_uart_putstring("dmp_set_fifo_rate complete ......\n");
  67.           }
  68.           else
  69.           {
  70.                    simple_uart_putstring("dmp_set_fifo_rate come across error ......\n");
  71.           }
  72.           run_self_test();
  73.           if(!mpu_set_dmp_state(1))
  74.           {
  75.                    simple_uart_putstring("mpu_set_dmp_state complete ......\n");
  76.           }
  77.           else
  78.           {
  79.                    simple_uart_putstring("mpu_set_dmp_state come across error ......\n");
  80.           }
  81. }
复制代码
然后在这个函数出错
  1. int dmp_load_motion_driver_firmware(void)
  2. {
  3.     return mpu_load_firmware(DMP_CODE_SIZE, dmp_memory, sStartAddress,
  4.         DMP_SAMPLE_RATE);
  5. }
复制代码
  1. int mpu_load_firmware(unsigned short length, const unsigned char *firmware,
  2.     unsigned short start_addr, unsigned short sample_rate)
  3. {
  4.     unsigned short ii;
  5.     unsigned short this_write;
  6.     /* Must divide evenly into st.hw->bank_size to avoid bank crossings. */
  7. #define LOAD_CHUNK  (16)
  8.     unsigned char cur[LOAD_CHUNK], tmp[2];

  9.     if (st.chip_cfg.dmp_loaded)
  10.         /* DMP should only be loaded once. */
  11.         return -1;

  12.     if (!firmware)
  13.         return -1;
  14.     for (ii = 0; ii < length; ii += this_write) {
  15.         this_write = min(LOAD_CHUNK, length - ii);
  16.         if (mpu_write_mem(ii, this_write, (unsigned char*)&firmware[ii]))
  17.             return -1;
  18.                                        nrf_delay_ms(2);
  19.         if (mpu_read_mem(ii, this_write, cur))
  20.             return -1;
  21.         if (memcmp(firmware+ii, cur, this_write))
  22.             return -2;
  23.                                        nrf_delay_ms(2);
  24.     }

  25.     /* Set program start address. */
  26.     tmp[0] = start_addr >> 8;
  27.     tmp[1] = start_addr & 0xFF;
  28.     if (i2c_write(st.hw->addr, st.reg->prgm_start_h, 2, tmp))
  29.         return -1;

  30.     st.chip_cfg.dmp_loaded = 1;
  31.     st.chip_cfg.dmp_sample_rate = sample_rate;
  32.     return 0;
  33. }
复制代码
用的应该是官方库呀= =




欢迎光临 Discuz! Board (http://qfv8.com/) Powered by Discuz! X3