完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我正在尝试使用 SPI Master 驱动程序来控制我的自定义板上的 DWM1000 模块。
几乎一切都很好,但过了一会儿:我得到一个断言。我检查了一个柜台,它每次都在不同的地方失败。 代码:全选 assertion "ret_trans==trans_desc" failed: file "C:/msys32/home/heged/esp/esp-idf/components/driver/spi_master.c", line 892, function: spi_device_transmit abort() was cassertion alled at PC 0"ret_transx400d2fbf on ==trans_decore 0 我知道,标准答案如下:“如果任何传输使用 spi_device_queue_trans () 排队但未使用spi_device_get_trans_result () 执行,则不能使用spi_device_transmit ()。” 主要问题是:我在我的代码中只使用spi_device_transmit () 所以任何东西都不应该排队。 我的代码的设置和相关部分: 代码:全选 spi_bus_config_t buscfg={ .miso_io_num=DW1000_MISO_PIN, .mosi_io_num=DW1000_MOSI_PIN, .sclk_io_num=DW1000_SCK_PIN, .quadwp_io_num=-1, .quadhd_io_num=-1, .max_transfer_sz=4096 }; spi_device_interface_config_t devcfg={ .clock_speed_hz = 1*1000*1000, .mode = 0, .spics_io_num = DW1000_SS_PIN, .queue_size = 7, .flags = SPI_DEVICE_HALFDUPLEX, }; 代码:全选 void spi_set_rate_low(void) { printf("SET LOWn"); spi_bus_remove_device(spi); devcfg.clock_speed_hz=1*1000*1000; spi_bus_add_device(VSPI_HOST, &devcfg, &spi); } void spi_set_rate_high(void) { printf("SET HIGHn"); spi_bus_remove_device(spi); devcfg.clock_speed_hz=8*1000*1000; spi_bus_add_device(VSPI_HOST, &devcfg, &spi); } 代码:全选 int writetospi(uint16 headerLength, const uint8 *headerBuffer, uint32 bodylength, const uint8 *bodyBuffer) { spi_transaction_t trans; memset(&trans, 0, sizeof(spi_transaction_t)); uint8_t bigBuffer[headerLength*8+bodylength*8]; for(uint16_t i = 0; i < headerLength; i++) { bigBuffer = headerBuffer; } for(uint16_t i = 0; i < bodylength; i++) { bigBuffer[i+headerLength] = bodyBuffer; } trans.length = headerLength*8+bodylength*8; trans.tx_buffer = bigBuffer; if(spi_device_transmit(spi, &trans) != ESP_OK) { printf("SPI WRITE ERROR!n"); return -1; } return 0; } 代码:全选 int readfromspi(uint16 headerLength, const uint8 *headerBuffer, uint32 readlength, uint8 *readBuffer) { spi_transaction_t trans; memset(&trans, 0, sizeof(trans)); trans.length = headerLength*8; trans.rxlength = readlength*8; trans.tx_buffer = headerBuffer; trans.rx_buffer = readBuffer; uint32_t err_code = spi_device_transmit(spi, &trans); if(err_code != ESP_OK) { printf("SPI READ ERROR!n"); return -1; } return 0; } 还有一件事:断言消息通常很奇怪,因为某些字符不在相应的位置(如上所示)。 知道会出什么问题/我错过了吗? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
945 浏览 0 评论
1672 浏览 0 评论
请问一下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗
1330 浏览 1 评论
1233 浏览 1 评论
5021 浏览 2 评论
为blufi_device设置自定义名称,但是无法修改,为什么?
1254浏览 4评论
请问ESP32-S2-WROOM怎么获得ESP32-S2外接FLASH的唯一序列号?
927浏览 3评论
2338浏览 3评论
ESP-IDF的VScode插件的build按钮点击会报错的原因?
2528浏览 3评论
ESP-Jumpstart例程中第5个工程:5_cloud连接报错是哪里的问题?
1052浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 12:45 , Processed in 0.408341 second(s), Total 39, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4665
