如何在FRDM RW612板写入日志文件并在其他设备取回数据?
FRDM RW612 室温长期采集方案求助
我正在FRDM RW612板上开展开发工作,现有一段可连续多日测量室温的代码,脚本运行正常但无法采集到有效数据。之前尝试用minicom --capturefile通过串口采集数据,但没有设备能长期监听RW612板。我更倾向于在RW612板上生成文件后后续取回,恳请提供可行的数据采集方案思路。
当前温度测量代码
//Homework 4 Seaver Olson #include "pin_mux.h" #include "clock_config.h" #include "board.h" #include "fsl_device_registers.h" #include "fsl_debug_console.h" float DEMO_MeasureTemperature(void); float DEMO_MeasureTemperature(void) { uint16_t tempRawValue = 0U; if (0UL == ((SENSOR_CTRL->MISC_CTRL_REG & SENSOR_CTRL_MISC_CTRL_REG_TIMER_1_ENABLE_MASK) >> SENSOR_CTRL_MISC_CTRL_REG_TIMER_1_ENABLE_SHIFT)) { SENSOR_CTRL->MISC_CTRL_REG |= SENSOR_CTRL_MISC_CTRL_REG_TIMER_1_ENABLE_MASK; } tempRawValue = (((SENSOR_CTRL->TSEN_CTRL_1_REG_2) & SENSOR_CTRL_TSEN_CTRL_1_REG_2_TSEN_TEMP_VALUE_MASK) >> SENSOR_CTRL_TSEN_CTRL_1_REG_2_TSEN_TEMP_VALUE_SHIFT); return (tempRawValue * 0.480561F - 220.7074F); } int main(void) { BOARD_InitBootPins(); BOARD_InitBootClocks(); BOARD_InitDebugConsole(); // 60 x 24 for (int i = 0; i < 5760; i++) { double temp = ((double)DEMO_MeasureTemperature()); PRINTF("%d: %.3f\n", i, temp); for (int j = 0; j < 30; j++){ SDK_DelayAtLeastUs(1000000, CLOCK_GetCoreSysClkFreq()); } } return 0; }
可行方案思路
1. 板载/外接存储方案
- 内部Flash存储:利用RW612的内部Flash,通过SDK提供的Flash驱动将温度数据按CSV格式写入预留的Flash扇区。注意Flash擦写寿命,可采用循环覆盖或分页存储策略,避免频繁擦写同一区域。后续通过调试接口或串口读取Flash中的数据。
- 外接SPI Flash:通过SPI接口挂载小容量SPI Flash(如W25Qxx系列),集成FatFS文件系统,将数据写入文件。后续可通过SPI转USB模块读取Flash内容,或直接在板子上电后通过串口导出文件。
- 外接SD卡:如果板子支持SD卡扩展(或通过GPIO模拟SPI驱动SD卡),使用FatFS管理SD卡,将温度数据写入CSV文件,后续直接取出SD卡读取数据。
2. 无线传输方案
- BLE批量传输:利用RW612的BLE外设,实现GATT服务缓存温度数据。当手机或BLE网关连接时,批量传输缓存的历史数据;或定时唤醒设备,主动推送最新数据到配对设备,后续从设备导出数据。
- Wi-Fi上传:外接Wi-Fi模块(如ESP8266),设备定时唤醒后连接Wi-Fi,将数据上传到本地服务器或云端存储,后续从服务器导出数据。
3. 温度采集代码修复建议
当前代码可能存在传感器初始化不完整的问题,导致无法采集有效数据:
- 检查TSEN传感器的采样配置,确保已启用TSEN模块并设置合理的采样周期
- 读取原始值前,等待TSEN采样完成标志位,避免读取未就绪的无效数据
- 添加DEBUG打印输出
tempRawValue原始值,排查是采样失败还是计算公式问题
内容的提问来源于stack exchange,提问作者Seaver Olson
相关产品推荐
相关产品推荐

