器件型号:CC3220
大家好、
我的客户有以下问题:
我们目前在将 cc3220作为 SPI 从器件运行以及 SimpleLink 驱动程序的功能方面遇到困难。 我们将一个 cc3220SF Launchpad 连接到通过 SPI 进行通信的 cc1310 Launchpad。 通信部分按预期工作。
简单的问题是、在使用 simplelink 驱动程序时、cc3220是否可以用作 SPI 从站?
cc3220项目基于 FreeRTOS 并使用 SDK 1.5 (由于 DMA 问题、我们已从1.4复制 SPIDMA 驱动程序)。 一般布局如下:
以优先级9运行的 Simplelink 驱动程序任务(sl_Task)
以优先级8运行的主任务
以优先级4运行的 SPI 从器件任务
其他:
FreeRTOS 定时器任务优先级5 (无定时器处于活动状态)
空闲任务。
在电路板初始化函数(SPI_init、GPIO_init)之后、按照上述顺序启动任务。 板载启动时、作为 SPI 主器件的1310通过 SPI 向3220发送同步命令。 这按预期工作。 然后、SPI 从任务调用 SPI_TRANSFIT 来等待未来的传输。
"主任务"的目的是定期运行、连接到 Wifi (通常在不同的模式下)并发送 HTTP 请求。 运行时、它会调用 sl_Start (如果更改模式、则调用 sl_Stop)。 这个 sl_Start 是我们遇到问题的地方。 它始终返回(-2004) sl_bad_interface。 禁用 SPI 从器件任务后、sl_Start 会正常工作。
SPI 从任务将 SPI 配置为传输模式= SPI_MODE_BLOCKING。 对此进行实验时、 SPI_MODE_CALLBACK 模式允许 sl_Start 命令成功、但 SPI 通信停止正常运行。 SPI 回调通过 SPI_TRANSFERS_Completed 进行调用、但两侧的缓冲区都为空。 回调模式还会引入随机问题、在 任务初始化期间、器件最终会在 dmaErrorFxn 中挂起。 如上所述、使用了1.4版的 SPIDMA 驱动程序、我们的 SPI 数据包为64字节、应低于 DMA 阈值100。
我们的其他问题是:
是否需要在处理 SPI TX/Rx 缓冲器的任务堆栈外部或内部构建 SPI TX/Rx 缓冲器? 在 SPI_MODE_CALLACK 模式下、我们的模式是使用回调中的 TaskNotify、并让 SPI 从任务循环处理数据包。
是否需要对齐 SPI TX/Rx 缓冲器?
simplelink.a 的来源是否可用?
是否可以重新编译或自定义 simplelink.a 以排除某些功能、例如 smartconfig、HTTP 服务器、配置 Web 界面?
谢谢、
Brian