Thread 中讨论的其他器件: SYSBIOS
工具/软件:TI-RTOS
CC2640定制4x4应用。 CCS 6.2、ble_sdk_2_02_01_18、XDS 200调试器。 应用使用 SPI (主器件)、UART (仅在传感器校准期间进行有线外部处理器通信)和 ADC 驱动器(仅当存在外部传感器时才使用 ADC 驱动器、否则不使用)。
校准后、会进行下电上电、传感器在正常模式下运行、而不会打开 UART 驱动程序。
传入 UART 消息帧的确切长度未知。 UART 报文帧之间的时间也未知。 每个报文帧都有一个标头字节的开始、后跟一个报文帧标识字节。 CC2640与外部处理器通信时没有其他握手方法。
UART 驱动程序的当前使用:读取回调、写入阻塞模式。
应用程序顺序:
1. 如果 UART 接收引脚有活动、则只打开 UART 驱动程序。
2. 如果 UART 驱动程序被打开,则开始等待 UART 字节到达。 UART 每次读取一个字节。
3. 如果 UART 读回调触发、将 UART 事件放入 RTOS 队列中。 当前、在 swi 上下文中使用 enqueue 函数(由 UART 读取回调触发)。
4. 传入的消息帧被汇编到 RTOS 队列中。 在汇编消息时、UART 还会从 RTOS 队列写入数据。 UART 写入后、CC2640会返回等待传入的 UART 消息、直到校准完成。
5: 2个连续传入字节之间的最大超时设置为1900个时钟周期(每个时钟节拍10us)、据此丢弃传入帧。
在读取回调模式下使用 UART 需要持续读取 UART 驱动程序、除非有数据要从 UART 驱动程序写入。 UART 读取指示-1的状态错误、有时会变为0。
升级到 ble_sdk_2_02_01_18后、当传感器通过 UART 进行通信时、会报告硬故障错误。 硬故障(BFAR)的存储器位置导致未知的存储器位置。 设置 ARM 高级功能会在硬件故障时停止调试器、但 ROV 不会更新异常报告和进一步了解问题所需的信息。 此错误似乎被存在的调试语句屏蔽(不会发生硬故障异常)。
在使用 ble_sdk_2_02_00_31通过 UART 进行通信时、也会注意到一些不一致之处。 当对特定 UART 消息的响应发生更改时、这似乎会消失。 其他方面都很好。
一位 TI 工程师对项目进行审阅后、建议添加 UART 任务并在阻塞模式下读取 UART。
UART 任务仅在存在 UART 引脚活动的情况下创建、而不是在其他情况下创建。
UART 任务优先级= 2
SBP 任务优先级= 1
设置了一个信号量来提醒 SBP 任务 UART 已完成写入、因此 SBP 任务可以在 UART 消息结束时接管。
该设置正在打破 BLE 广播。 无论是否存在 UART 活动、传感器都会达到硬故障异常。 GAP 角色任务最终被阻止、并且 ROV 中显示了一个栈大小为0的未知任务。 (随附两个屏幕截图)。
使用 UART 任务与连续读取 UART 是否更好的设计? 如果这是设计固件的更好方法、如何设置 UART 任务?
还是这不是 UART 驱动程序设置和监控的问题、而所有问题都适用于 CC2640R2芯片和堆栈? 请提供建议。
谢谢、
Priya




