完善资料让更多小伙伴认识你,还能领取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; } 还有一件事:断言消息通常很奇怪,因为某些字符不在相应的位置(如上所示)。 知道会出什么问题/我错过了吗? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
350 浏览 0 评论
1196 浏览 1 评论
590浏览 6评论
484浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
468浏览 5评论
467浏览 4评论
445浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 21:49 , Processed in 0.768999 second(s), Total 73, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号