开源协议
:GPL 3.0
描述
1,简介
前段时间接触到D133单片机,然后买了块开发板学了下,鉴于D133支持mipi驱动屏幕,偶尔的机会又找到了有资料的手机屏(XH8379A)并且成功的驱动了起来,包括显示和触摸,于是一拍即合,决定手挫一个手机(开发板),这也是我设计过较为复杂的项目之一(涉及到原理图、PCB设计、外壳设计、面板设计、嵌入式开发等等)。
视频介绍:https://www.bilibili.com/video/BV1njBxYkErg/
2,硬件设计
2.1,主控(V1.0 2024.05.15)
控制器:D133CBS
主频:400MHz
闪存:16MB nor flash
RAM:1MB SRAM,8MB PSRAM
封装:QFN88-L10*10
启动方式:SD卡、NOR-NAND FLASH、USB-BOOT
D133使用24M无源晶振和32.768K低速晶振提供系统时钟源和计时器时钟源
D133需要提供3.3V和1.1V共2组电源输入,同时对外提供2.5V和1.8V两个LDO,电流为100mA
接着是复位电路和BOOT0按键
2.2,程序存储器
外接W25Q128提供16M外置FLASH供存储程序,使用SPI0(PB0~5),硬件上要求必须提供上拉电阻
2.3,内存卡接口
同样需要提供上拉电阻,SD卡座支持插入侦测脚,使用SDMC1(PC0~5),侦测脚PC6
2.4,显示触摸
屏幕接口:MIPI-DSI 2lines(PD18~21),硬件复位:PA5,不用阻抗、注意差分等长和尽量包地即可,CTP-LED为虚拟按键的背光电源。
如果需要控制虚拟按键背光还需要增加一个三极管或MOS,LCD_ID用于检测屏幕是否连接上,PWM_OUT是PWM输出脚,可以通过MIPI-DSI指令使这个管脚输出PWM,然后接到背光驱动电路上用来调节背光亮度,所以使用这个管脚可以节省一个PWM管脚
背光电路控制脚PE13,PWM2
触摸接口:IIC2(PA8~9),复位:PA10,中断:PA11,硬件必须上拉
2.5,USB接口
D133 USB IO保护电路
2.6,CSI摄像头
CSI摄像头,使用8bit并口采集图像(PE0~10),D133不支持MIPI-CSI,配置接口使用IIC0(PD0~1),复位脚:PA2,电源脚:PA3,MCLK脚:PE11
使用)V5640自动对焦摄像头模组,STROBE脚用于控制闪光灯,也可以当作手机的照明LED,需要使用IIC指令控制,所以为了减少IO口占用,控制照明需要打开摄像头,这就是为什么手机照明APP需要摄像头权限。
OV5640和2640电源稍有区别,但是估计问题也不大,需要两个2.8V和一个1.2V,只有带自动对焦功能的OV5640需要一个AF电源,单独给个2.8V即可
2.7,陀螺仪
V1.0版本陀螺仪使用MPU6050,使用IIC1(PD2~3),中断脚:PD4
2.8,环境光
V1.0版本环境光使用LTR-553ALS-01,和陀螺仪共用使用IIC1(PD2~3),中断脚:PB6
2.9,音频(数字)功放
音频电路使用数字音频DSPK1,PE12,使用单与门隔离数字信号,使用带通滤波电路过滤330~3.3KHz的音频信号,使用AB类功放LM4871放大模拟信号接到喇叭
2.10,锂电池充电电路
使用1.25-2PWB接口连接2500mAh聚合物锂电池
电压采集电路,使用2个10K分压,串1K电阻保护IO口
锂电池充电电路,使用TP4056,最高支持1200mA,设定为800mA
还有一块更大的华为电池,然而大小都赶上屏幕了,几乎是塞不下,PCB只能断成两截用FPC连,担心强度可能不够所以放弃
2.11,V1样板
第一版硬件大概就是这样,严格按照规格书设计PCB尺寸,鉴于比较复杂就用了4层设计,但是尺寸超过了10CM,所以第一版使用了2片PCB来整合(保证10CM以内可以用券),因此电源和USB等信号需要用焊盘对接
顶板
底板
先测试一下尺寸,很好,就这么打板子了
第一版焊接,第一步焊接电源系统,板子到了焊接的时候又看了下手册,2.5和1.8是对外输出的LDO,所以设计了4路dcdc的电源属实是多余了,然后电源层还是走的中间层,还好没把孔放在焊盘上,简单划断2处连线就解决了电源问题,测试结果电源正常。
测试D133下载运行,可以正常工作,但不显示
最终发现MIPI的CLK差分对接错了,所以白给6根6mil最小间距的走线飞22R电阻了,因为官方参考电路用的LVDS屏,所以CLK差分对和MIPI不太一样,V2版本修复了这个问题,确实是疏忽,以为差分接口的时钟是同一对
最终飞线修改了CLK差分对,点亮了屏幕
还在验证摄像头的时候,板子莫名其妙冒烟了,但是屏幕没烧坏,只是接在我这块板子上不亮了,但是D133又还能正常工作,背光也能正常点亮,就很离谱
最终发现摄像头的IIC没接上拉电阻,先是给IIC的SDA接上了上拉电阻(确实不太好焊电阻),但是依旧读不到ID,是在没招而是不是我焊接问题,就抱着试试看的心情给IIC的SCL也焊上了上拉电阻,欸,还真就可以了,反正屏幕不显示就不显示吧,基本上都验证的差不多了,改版再说,毕竟第一版连按键都没
2.12,V2版本硬件更新(2024.06.21)
V2增加了一些更符合手机的功能,同时也变得更加复杂化,但仍不是最终版本,因为目标是既要精简又要多功能,还要美观。
1,重新设计了电源系统
电源拓扑十分复杂:
1,USB通过充电芯片给锂电池充电
2,电池给系统供电,不与USB供电冲突
3,USB给系统供电,不与电池供电冲突
4,电池通过升压对外提供5V输出到USB,不与充电功能冲突
5,无线充电功能
为了解决以上需求,可以使用二极管防止电源冲突,但是会拉低电压,并且小封装二极管(为了手机主板体积)不能大电流工作,于是决定使用PMOS来分别控制各个电源的电流方向。
这时又有两个方法,第一用逻辑门根据电压的有无情况切换电流方向,例如有锂电池时打开锂电池供电,有USB时打开USB供电,有锂电池且有USB时打开锂电池供电,关闭USB供电,打开USB充电,为了再加上5V升压输出和无线充电功能,又要单独考虑不同的电源情况。另一种方法就是用MCU来控制各处的MOS。
这里我用了第二种方法,使用一片CH573用作系统电源流向控制、蓝牙外设等等功能,同时由于电源供给交给了CH573控制,因此可以彻底断电D133整个系统以更好的做低功耗,延长手机续航。
2,重新设计了调试系统
手机只有一个USB口,但是D133有USB接口用来下载固件和作为设备端,还有串口用来输出log,CH573也需要USB口来更新固件,同样也需要log串口,所以为了一口解决调试问题,给手机板放了一个集线器,正常情况下是手机USB口作为HUB输入口,分出4个USB分别连接D133的USB、USB串口芯片、CH571的USB和串口,特殊情况下通过USB切换开关将USB口直连D133作为OTG功能。
还需要注意的是手机作为从机需要下拉CC脚触发主机供电,而作为主机需要检测CC脚电平,因此严格来说还需要CC检测和控制电路
3,增加了震动马达
4,其他
红外发射电路
虚拟按键独立背光
5V升压DCDC
5,PCB效果
3维预览效果
6.焊接情况(24.07.05更新)
焊接图
电池
2.13,V3版本改进(24.07.13)
使用1mmPCB+锅仔片按键做侧按键(沉板焊接),减少侧边体积占用
顺便把按键模型设计在了一起,按键板也做在一起了
手机屏有前开窗透明孔,所以可以加前摄像头,于是再加一个前置摄像头接口
//
设计了2个喇叭接口,可以从耳机孔(做了衰减)或正常外放喇叭播放音频
//
微调SD卡操位置,使SD卡插入时突出不那么明显
3,外壳设计
外壳设计使用soildworks2022,用3D打印,分为以下几部分
3.1,手机中框
下侧:USB-TYPE-C口
左侧:SD卡槽
右侧:电源、音量按键
顶侧:红外孔
顶侧
PCB零件配合
优化过的中框版本(缓解显卡压力,去掉了大部分阻容模型)
第一版中框结构验证
3.2,手机按键
侧按键
通过M1.2螺丝固定到外框上
改版按键,首版按键较厚占用过多侧向空间,所以采用新版按键,同时配上锅仔片按键,有助于减少空间占用,侧按键增加标识浮雕
为了减少打印件数量及简化安装和侧边厚度占用,采用了锅仔片按键,配合1mm厚的PCB,仅需要占用1.2mm的宽度+0.2mm的按键行程,一体按键
3.3,背板
使用亚克力激光切割外形,扣除比较高的元件空间,类似CNC
4,安装步骤
4.1,手机屏排线整理
首先需要用高温胶带固定手机的触屏排线,便于安装到PCB上
4.2,按键安装(按键优化中)
安装按键到手机中框的按键孔中,由于结构整体对称所以需要注意按键的方向,“+”在上,“-”在下,以及电源按键的方向
4.3,PCB安装
先放PCB的USB口,对齐手机中框的USB开孔,左上角注意触摸PFC的元件位置,安装4颗M1.2螺丝固定PCB
4.4,电池,SD卡安装
将锂电池按照PCB空挡位置安装,接上插头,从正面左侧装上SD卡
4.5,手机后盖安装
安装手机后面板,对齐后置摄像头挖孔,从下侧螺丝孔安装M1.2螺丝固定后盖
5,程序开发
5.1,开发环境(VSCODE)
D133基于VSCODE编译,使用AiBurn通过USB接口连接电脑下载镜像(固件)。
5.2,驱动移植
1,显示驱动移植:
新建xh8379a驱动,路径:bsp/artinchip/drv/display/panel
按厂家提供的初始化序列及屏参数,参数对应到显示面板结构体中。
屏幕初始化序列
2,触摸驱动移植
新建ft6306驱动,按照rtt驱动框架适配读写接口,IIC地址:0x38,即0x70右移1位
3,虚拟按键
屏幕下方虚拟按键隶属于触摸屏,手指按住虚拟按键时也会触发中断,固定上报一个坐标,这个坐标超出屏幕高度,所以需要特殊处理为按键信息
然后通过输入结构体的键值传递给UI
5.3,程序架构
程序使用luban-lite-SDK,使用RTT嵌入式操作系统编写。界面采用极为炫酷的lvgl编写。
日常APP图标
1,系统启动UI
添加了过渡动画和透明度渐变
2,锁屏UI
输入密码正确自动跳转到桌面,目前密码是写死的,按键非矩阵按键控件,可以方便贴图更换按钮样式和解决symbol显示异常问题
新增了从SD卡显示的背景图,缩放数字按键比例,更好看一点
3,系统桌面UI(正在拼命写ing...)24.09.05更新
验证独立矩阵布局
测试多语言及动态切换背景图片,顶部菜单、电池点亮等
下拉菜单。
4,应用APP
官方有几个UI做的还是不错的,可以直接拿过来运行,但是分辨率适配的不适合竖屏,还需要做调整或者重新布局。
仪表盘,咖啡机,压力测试
控件,gif演示,键盘输入
自定义列表,自定义表格
音乐播放器,视频播放器
相机(摄像头),也需要调整分辨率,显示位置等参数,官方暂时只有ov5640的驱动
5.4,CH571蓝牙开发(环境:MournRiver)
蓝牙串口交互例程增加D133系统电源控制相关引脚初始化
TMOS自己的task任务增加电源状态查询及控制
评论