Part Number:CC1310
RF_tran_usleep.C
上面的 no-RTOS 代码, 配置 CC1310 使用 4M bps 模式, 执行 5次 传感器信息的 检测 和 无线传送; 然后 CC1310 休眠 500ms
调试过程中, 也实时 检测工作状态下的 电流信息:(1) 休眠500ms 电流大致 820uA
(2) 执行 RF_tran_init 操作
(3) 执行 trig_sensor_work() 让传感器 启动工作, 然后 进入 usleep(300), 电流 12mA
(4) 执行 i2c_read_sensor_info() 电流 12mA~15mA 持续大约 1ms
上面的 (3) 和 (4), 执行5次 以后, 然后执行 RF_tran_close, 再执行上面的 (1)
上述代码, 可以顺利执行。对于 无线接收端, 可以接收到对应的 信息, 传送到 计算机 并 保存。
但是, 持续 运行状态下, 有时候会出现下面的 问题:* 无线接收端 不能接收到 无线信息了; 检
* 测的 电流信息, 持续 12mA —> 很像是 持续处于 上面的(3) 对应的 usleep(300) 那种状态
有时 运行 几十分钟 出现这个问题; 有时运行 几个小时 出现这个问题。
如果将上面的那一行代码 usleep(300) 修改为 CPUdelay( CLK_DIV3_300us ), 多个测试单板, 都可以 持续运行 —> 上面的(1) 休眠500us usleep(500100) 始终可以顺利运行。
请问一下, 对于 usleep 执行小于 1ms 的休眠, 是否在 某种情况下, 它就 不能退出 休眠状态了?
另外, pinStandby 例程中的 sleep 函数, 可以配置 休眠 N-sec。
请问一下, 使用 sleep() 是否 比 usleep() 可以让 CC1310 休眠状态下的 电流, 更小一些? 对于 sleep() 休眠时间, 是否 可以 配置 小于1秒的、 N-ms 状态?
Galaxy Yue:
您好,
1.请问您具体使用的是哪个版本号的SDK?
2.您第一个参考的是哪个例程?具体是要测什么指标?
,
Galaxy Yue:
您好,关于 pinStandby 例程
1.sleep的输入参数是seconds、usleep的输入参数是micro seconds。但是使用usleep功耗没变化,同sleep一致。
另外,正常情况下stanby模式下大约是1.1uA,会有变化,最大也就2uA左右。
关于电流大小的比较,建议您采用仪器测量的方式会得出更为准确的结果。
2.推荐您看一下TI RTOS中的power management文档
www.ti.com/…/swra478d.pdf
,
user3985772:
对于您提到的 (1), 我使用的 SDK 版本信息: simplelink_cc13x0_sdk_4_20_01_03 (使用 noRTOS 例程)
对于您提到的 (2), 我是 参照 "rfPacketErrorRate" 这个例程, 执行 4M bps 无线发送。 无线 发送的 信息,是 采集 传感器 得到的。
对于 传感器,使用 单次 触发工作的 模式: CC1310 对 传感器芯片 配置 那几个寄存器,让 传感器 启动工作;传感器 工作 300us 以后,才可以 将 采集的 数据准备好(然后 传感器 自动 进入 省电的 休眠状态); 接下去,CC1310 读取 传感器 数据 再 无线发送。 即,这个 过程中,CC1310 需要 等待 300us。
如果 让 CC1310 使用 usleep( coef_300us ) 这个函数 等待 300us, 一般是 可以顺利工作; 但是,有时 会出现 死机状态: 整个调试单板的 电流信息,就是一个 固定的 电流值。 备注:因为 CC1310 芯片、传感器 芯片、单板上的 其它芯片,它们 共用一个 电源 —-> 不能 准确获取 CC1310 具体消耗的 电流。
对于 CC1310 使用 usleep( coef_300us ) , 处于 顺利工作的时候, 整个调试单板的 电流,是 变动的: 对 传感器 执行 配置时,CC1310 和 传感器 都 工作,电流 比较 大; 然后 CC1310 休眠 300us,电流 降低了; 再后面,传感器 将 数据准备好了,CC1310 读取 数据,执行 无线发送,电流 就 挺大了; CC1310 无线发送完成,进入 休眠 500ms 这个 挺长时间的 休眠状态(也 关闭了 无线发送),整个调试 单板 电流 就很小了(只有 820uA)。
如果 CC1310 使用 CPUdelay( coef_300us ) 这个函数,等待 300us,始终 可以顺利运行,不会出现 死机的 状态。
另外,上面的 代码中,也使用 usleep( coef_500ms) 执行 500ms 这个挺长时间的 修改。它 始终都是 顺利运行,从来不出问题。或者说,如果 代码中 没有 使用 usleep( coef_300us), 那么, 无论是否 使用 usleep( coef_500ms), 都是 可以 顺利了运行,没有 出现 死机的 状态。
另外,usleep() 这个 函数的 单位,是 us。 例如:usleep(300) 示波器 可以显示,电流比较小的 时间,持续 300us
对于上面提到的、usleep( coef_500ms ), 实际的代码 就是 usleep( 500000 )。示波器 可以显示,对应的、电流比较小的时间, 大致 500,000us
,
Galaxy Yue:
您好,
1.关于pinStandby 例程,您的问题在查阅相关资料后能否得到解决呢?
user3985772 said:usleep() 这个 函数的 单位,是 us
Galaxy Yue said:usleep的输入参数是micro seconds
我们两个描述的都是微秒,没有问题的。
2.您的目的是想找到这种情况存在的可能性吗?我看您的实验流程,不太能总结出您的具体目标所在。
user3985772 said:对于 usleep 执行小于 1ms 的休眠, 是否在 某种情况下, 它就 不能退出 休眠状态了?