c - ESP32 使用 SPI 连接到单独的 IC
问题描述
我正在尝试使用 ESP IDF 为 C 语言中的 S1V30120 dectalk 文本合成 IC 编写包装器。我在以下代码中遇到了问题。
printf("Hello world!\n");
esp_err_t ret;
spi_device_handle_t spi;
spi_bus_config_t buscfg={
.miso_io_num=PIN_NUM_MISO,
.mosi_io_num=PIN_NUM_MOSI,
.sclk_io_num=PIN_NUM_CLK,
.quadhd_io_num=-1,
.quadwp_io_num=-1
};
spi_device_interface_config_t devcfg={
.clock_speed_hz=750000,
.mode=0,
.spics_io_num=PIN_NUM_CS,
.queue_size=7
};
ret=spi_bus_initialize(HSPI_HOST, &buscfg, 1);
assert(ret==ESP_OK);
ret=spi_bus_add_device(HSPI_HOST, &devcfg, &spi);
uint8_t rec[20];
assert(ret==ESP_OK);
uint8_t cmd[] = {0xAA, 0x04, 0x00, 0x05, 0x00}; // get information command
printf("waiting for rdy");
while (gpio_get_level(PIN_NUM_RDY) == 0){};
//create 2 transactions 1 for transmitting the GET INFORMATION command
//and 1 for getting the data back from the ic
spi_transaction_t t;
spi_transaction_t r;
memset(&t, 0, sizeof(t));
t.length=5*8;
t.tx_buffer=&cmd;
r.length=20*8;
r.rx_buffer=&rec;
ret = spi_device_transmit(spi, &t);
assert( ret == ESP_OK);
ret = spi_device_transmit(spi, &r);
assert(ret == ESP_OK);
printf((char*)r.rx_data);
/* Print chip information */
printf("Restarting now.\n");
我很确定连接应该处于全双工模式,并且我相信设置正确。返回的信息应该是 20 个字节,但我收到了错误
rxdata transfer > 32 bits without configured DMA
目前我正在关注两段可能有帮助的代码。
在 esp idf 中使用 SPI 的示例: https ://github.com/espressif/esp-idf/blob/3276a1316f66a923ee2e75b9bd5c7f1006d160f5/examples/peripherals/spi_master/main/spi_master_example_main.c
在 Arduino ide 中使用 dectalk ic 的示例: https ://electronza.com/arduino-due-s1v30120-text-speech-code/2/
dectalk ic 协议表: https ://github.com/MikroElektronika/Click_TextToSpeech_S1V30120/blob/master/datasheet/S1V30120%20Protocol%20Specification.pdf
以及 esp idf 的 SPI 文档: https ://gitdemo.readthedocs.io/en/latest/api/peripherals/spi_master.html
协议表还说明了在我以前从未见过的事务之后发送 16 个字节的 0x00 的内容。
我希望我对所有这些信息足够透彻,我提前感谢任何可以提供帮助的人!
解决方案
推荐阅读
- r - 使用 grepl 而不是完整字符串返回字符串的已识别部分
- node.js - Alexa 琐事游戏自定义答案槽类型无法识别错误答案
- javascript - npm 包在 IE11 中导致 SCRIPT1006: Expected ')' 错误
- java - Android Toast 在 Intent onNewIntent 之前
- node.js - 使用 node.js 创建 WordPress 页面
- javascript - 设置输入字段的值并在页面加载时提交
- oop - 当父类失去意义时,将兄弟类作为父类是一种好习惯吗?
- jestjs - jest 未定义 - 在 __mocks__ 文件夹中
- c# - 构造函数只能链接在初始化列表中,为什么
- php - 如何仅在 url 编码中对空间进行编码?