我在使用BLE_Bridge的democode,使用SPI进行通信的时候发现一个问题,在从机发送过程中,假设要发送0x01 0x02两个字节,在主机端则接收到的三个字节:0x00 0x01 0x02。。前面多了个0x00。在代码中有这么一条:HAL_DMA_SET_LEN(ch, SPI_PKT_LEN(spiTxPkt) + 1); /* slave DMA TX might drop the last byte */表明是发送3个字节。我想问一下其中的缘由。
谢谢。
Nutcracker:
请到蓝牙版面提问。
Barbara Wu:
我检查了我的BLE_Bridge的代码,并没有看到您所说的HAL_DMA_SET_LEN(ch, SPI_PKT_LEN(spiTxPkt) + 1); /* slave DMA TX might drop the last byte */ 这一段代码,能否请您更详细的告知具体位置?
您可以尝试在发送的数据参数后面加上一个回车换行符 这样看看是否会接收到多个字节
TracyMcgrady:
回复 Barbara Wu:
首先改配置为CC2541-SPI。然后在hal_uart.c中有
#if HAL_UART_SPI#include "_hal_uart_spi.c"#endif
在_hal_uart_spi.c中有HAL_DMA_SET_LEN(ch, SPI_PKT_LEN(spiTxPkt) + 1); /* slave DMA TX might drop the last byte */ 这个描述
Barbara Wu:
回复 TracyMcgrady:
这个应该是应为加了一个结束符SPI_SOF
TracyMcgrady:
回复 Barbara Wu:
SPI_SOF是包含在长度SPI_PKT_LEN(spiTxPkt)里的。SPI_PKT_LEN(spiTxPkt)是数据加上头尾后完整数据的长度。
Barbara Wu:
驱动是基于DMA实现的,不是SPI TX实现的。这也许不是最好的处理算法。你可以想办法绕过数据长度,例如在发送的数据里包含实际有用的数据长度,或者基于SPI TX重写SPI的驱动。
sindorei zeng:
回复 Barbara Wu:
你好:
我想使用cc2541的硬件SPI ,但不知道怎么配置:需要修改哪些宏定义。
yukui cao:
你好!
能否指教如何使用协议栈的spi。