软件/硬件架构
功能结构
Cortex M0+的任务: 1. 显示刷新 2. 休眠唤醒管理,控制CM4的唤醒与休眠 3. 文件系统管理(无网络条件下显示上次或者默认的内容,从文件系统读取) 4. Cortex M0+内核通过内部时钟间歇性休眠/唤醒 Cortex M4的任务: 1. 通过网络模块隔一段时间向网络应用请求是否有新内容需要下载,这个间隔由CortexM0+内核来控制. 2. 接收串口命令,如配网,测试,等等. 3. Cortex M4内核在完成一次认务后自动休眠.任务包括:响应shell的命令,查询云端,下载并发送内容至Cortex M0+等等.总之CortexM4执行任务采取被动式,有活干就去干活,无活干就直接Sleep.
硬件连接
实现与代码主要的代码为EInk刷新与网络内容获取. Eink刷新大致顺序是先将内容放到COG控制IC的内存(这个内存(memory)可以是图像buffer,SRAM或者Flash)中,接着给COG驱动上电并且初始化COG驱动,然后按照特定的显示数据格式将存储在IC内存中的内容发送到EPD(E-Paper Dispaly)显示. 更新EPD显示内容的三种方式: · 4步; · 2 步; · 部分更新; 其中4步更新是最耗时的,但是显示效果也最好(残影少).2步更新是省去了其中两步,部分更新就是省去了大多数操作.如果原来显示的内容与新内容相差过大,则需要用4步更新,否则酌情减少步骤.当然所需要的更新时间与显示效果是一个Trade-Off关系,需要程序员折中处理.一般的电纸书应用这样做的:第一次显示某本书使用4步更新,之后每页纸进行部分更新,若干页后进行2步更新,过了更长的阶段后再进行一次4步更新.比较细节的部分请参阅模块文档或后文的代码连接. 网络端内容服务云端部分的代码本人暂时使用一个Python的http server替代.如果内容文件被替换并成功下发,则在配置文件中写下该内容文件的MD5值.下次请求内容时,检查内容文件与配置文件中的MD5值,如果有不同则表明内容文件已经更新可以下发.否则响应”no freshcontent”. 目前没有做推送服务,所有的通信要由板子端发起. 代码共享连接[暂缺,后面补全 后记
此次开发设计还有很多想要做的内容没有全部完成,但是使用双核心或者多核心的芯片开发IoT应用会是今后的趋势.原因在于某些任务需要频繁的IO操作,某些任务需要迅速做完以便多休眠.如果要在功能体验与功耗上做一个折中平衡,异构多核心处理器是比较好的选择.
|