本帖最后由 安度 于 2022-3-13 08:59 编辑

OneWatch方案
一、需求分析
1.RTC功能,分为数显式和指针式,两种显示模式可以互相切换,且可以手动设置时间,精确到秒。
2.秒表功能,精确到百分之秒,如果可以,精确到毫秒。
3.指南针功能。
4.抬腕亮屏与无操作自动息屏功能。
5.不带按键且又可以进行各种切换操作。
6.电源方案需要实现软件关机功能。
7.能较精确检测电池电量,电源方案能使软件识别当前是否正在充电。
8.IAP固件更新功能。
二、硬件设计
1.芯片选型
(1)RTC功能需要使用RTC芯片,选择NXPPCF8563I2C通信协议。
(2)指南针功能需要磁力计,抬腕亮屏功能需要姿态传感器,选择MPU9250,自带3轴加速度计、3轴陀螺仪与3轴磁力计。
(3)不带按键实现切换操作,也可以使用MPU9250获取姿态动作作为输入。
(4)电源方案实现软件关机功能,要求电源芯片必须有EN使能端,选择SY8089A作为3.3V降压IC
(5)能使软件识别当前是否在充电,要求锂电池管理芯片必须有相应的查询功能,选择TP4056作为锂电池充电管理IC,其CHG引脚在充电时为低电平,可以作为充电检测。
(6)检测锂电池电量,采用ADC检测电压法。
(7)主控芯片选择STM32F411CEU6UFQFN48封装,占PCB面积较小,FLASHSRAM容量也足够(512KB128KB)
(8)为了实现IAP功能,可能需要SPI Flash,暂时记录W25Q128
2.各部分原理图设计
111.png
file:///C:/Users/21673/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
三、软件设计
1.IAP功能设计(选定方案1)
(1)IAP功能方案1
利用STM32的USB将固件通过FAT32文件系统写入外扩SPI Flash中,在bootloader中检测Flash中是否有固件.bin文件,如果有将其更新到APP区,更新完毕将其删除后,跳转到APP处执行。
(2)  IAP功能方案2
利用STM32的串口更新固件,开机时在bootloader中检测当前姿态传感器的x轴倾角是否大于45°,是则进入IAP模式,接收上位机发送的固件,采用应答机制:上位机先发送固件的大小,以便串口判断该接收多少数据;串口接收2048字节的数据并将其写入APP区域后,发送0x55给上位机通知其发送下2048字节数据,直到固件写入完毕。利用STM32软件复位重启且确保重启前姿态传感器x轴倾角小于45°,以便令bootloader跳转到APP区。若误触发IAP模式,则一定时间内未检测到串口数据,则自动复位。上位机采用QT5编写。
2.UI设计
UI设计使用LittleVGL开源库进行设计。
3.效果图
反面:
1112.png
file:///C:/Users/21673/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
正面:
file:///C:/Users/21673/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
1123.png