Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Нужна помощь ESP32 не может прочитать данные с тюнера RDA5807, хотя команды получает

Тема в разделе "ESP32 SDK", создана пользователем dmitrij9992905, 11 мар 2019.

  1. dmitrij9992905

    dmitrij9992905 Новичок

    Сообщения:
    3
    Симпатии:
    0
    Доброго времени суток!

    Пишу в esp-idf для ESP32. Хочу подключить тюнер RDA5807M к ESP32, но при попытке прочитать из него данные выводится ошибка i2c null address error. Мой код:
    Код (Text):
    1. uint16_t getRegister(uint8_t reg) {
    2. uint16_t result;
    3. uint8_t h = 0;
    4. uint8_t l = 0;  // Действуем по алгоритму, описанному в документации ESP-IDF
    5. i2c_cmd_handle_t cmd = i2c_cmd_link_create();
    6. i2c_master_start(cmd);
    7. i2c_master_write_byte(cmd, (RDA5807M_I2C_ADDR_RANDOM | WRITE_BIT), ACK_CHECK_EN);
    8. //i2c_master_write_byte(cmd, 0b00100010, ACK_CHECK_EN);
    9. i2c_master_write_byte(cmd, reg, ACK_CHECK_EN);
    10. i2c_master_stop(cmd);
    11. i2c_master_start(cmd);
    12. i2c_master_write_byte(cmd, (RDA5807M_I2C_ADDR_RANDOM | READ_BIT), ACK_CHECK_EN);
    13. //i2c_master_write_byte(cmd, 0b00100011, ACK_CHECK_EN);
    14. i2c_master_read_byte(cmd, h, ACK_VAL);
    15. i2c_master_read_byte(cmd, l, NACK_VAL);
    16. i2c_master_stop(cmd);  esp_err_t ret =
    17. i2c_master_cmd_begin(i2c_port_num, cmd, 500 / portTICK_RATE_MS);
    18. i2c_cmd_link_delete(cmd);  
    19. // Складываем два байта в слово и выдаем
    20. result = (uint16_t)h « 8;
    21. result |= l;
    22. return result;
    23. }
    Код примера:
    Код (Text):
    1.  
    2. static esp_err_t i2c_example_master_read_slave(i2c_port_t i2c_num, uint8_t* data_rd, size_t size) {
    3.  if (size == 0) {
    4.   return ESP_OK;
    5.  }
    6.  i2c_cmd_handle_t cmd = i2c_cmd_link_create();
    7.  i2c_master_start(cmd);
    8.  i2c_master_write_byte(cmd, ( ESP_SLAVE_ADDR « 1 ) | READ_BIT, ACK_CHECK_EN);
    9.  if (size > 1) {
    10.   i2c_master_read(cmd, data_rd, size - 1, ACK_VAL);
    11.  }
    12.  i2c_master_read_byte(cmd, data_rd + size - 1, NACK_VAL);
    13.  i2c_master_stop(cmd);
    14.  esp_err_t ret = i2c_master_cmd_begin(i2c_num, cmd, 1000 / portTICK_RATE_MS);
    15.  i2c_cmd_link_delete(cmd);
    16.  return ret;
    17. }
    18.  
    Код ошибки 263. Что я делаю не так?
    Та же тема на англоязычном форуме: RDA5807M gets i2c commands but ESP32 cannot read (i2c null address error) - ESP32 Forum
     

Поделиться этой страницей