``
最近学习鸿蒙系统的演进,其中
可以看到目前我们处在鸿蒙OS2.0阶段,作为一个大的生态系统,Linux和LiteOS仅仅是它所支持的内核一部分而已。
我获取的试用品是“AI Camera”,拿到手上的电源颇为奇怪。
虽然是u***接口,但标示居然是内正外负……
我们现在通过AI Camera的原生系统,做一下简单研究。
一、启动以后到底能不能使用wifi功能
我多次启动AI Camera,有时可以通过wifi找到网络,有时又不行,到底有什么区别呢?
将串口接在AI Camera上,加电启动,查询打印日志,发现能否正常启动wifi的区别在于SDIO口的驱动是否加载成功。
在这里可以看到,当扫描不出SDIO设备时,是无法通过屏幕中设置加载wifi的。
那么,什么是SDIO呢?
SDIO原本是用于SD卡的接口标准,SDIO总线和USB总线类似,采用HOST- DEVICE结构,HOST可以连接多个DEVICE,通信命令由HOST端发出,在DEVICE端解析和响应HOST的命令,进行彼此通信,其好处是可以大幅度减少DEVICE的设计。
SDIO标准定义有两种类型的卡,全速卡(full-speed card)和低速卡(low-speed card),全速卡支持SPI、1 bit SD和4 bit SD模式,时钟范围0~25Mhz,传输速率最大达到100Mhz;低速卡仅支持SPI和1 bit SD模式,时钟速率为0~400Khz。
其中管脚定义如下图:
图片来自网络,如有侵权,请告知,即可删除
与大多数通信协议相同,按照低字节在前,高字节在后的顺序传输,但是每个字节的数据则是按照高位在前,低位在后的顺序。
1-bit和4-bit的区别在于1-bit只使用7脚(DAT0)数据线传输,8脚作为中断使用;4-bit则使用1,9,8,7脚(DAT3~DAT0)均作为数据线并行传输,依次先发送高4位,再发送低四位,其中8脚还复用为中断SPI则使用DI和DO不同脚分别作为输入输出。
说了这么多,为什么启动时可以支持SDIO,有时又不行呢?多次试验发现当直接上电,SDIO card初始化没有成功;但是使用命令行reset设备或者调用bin下的init后,SDIO card初始化成功的概率要大一些。推测和上电时序有关,在后续操作系统使用时可以考虑在这里加一个延迟函数。
二、显示和触屏
在实际使用时,可以发现自带的屏幕和HDMI只能有一个作为显示输出,当使用HDMI输出时,显示在角落(分辨率的原因)。
触摸功能依然可以使用,但滑动方向从左右变成了上下,而且只有左半边可用,具体原因尚不明确。
关于调用本地显示屏或者启用HDMI显示,这里可以看到,在启动hdmi成功后,有一个“HI_MPI_HDMI_GetSinkCapability”,当不插入HDMI连线时,该检测失败。可以看到后续初始化的参数也有所不同。
三、星期的显示
我们知道在AI Camera因为没有RTC,所以每次启动都是从1970年1月1日0点开始,系统中可以用date -s命令修改时间(例如date -s 13:05:00或者date -s 20201104),修改后不超过一分钟在屏幕上可以生效。但是发现一个非常奇怪的事情,那就是直接在系统中使用date命令查看的星期几是对的,但是在屏幕上显示是错误的,而且很有意思的是,显示结果是可以推进的,例如我们修改日期为20201106,
OHOS # date -s 20201106
OHOS # date
Fri Nov 6 00:09:28 2020
可以看到系统里面已经自动识别是星期五,但屏幕上会显示为“星期一”。
初始化屏幕显示1月1日 星期天,但可以从万年历上查到1970年1月1日是星期四。这么看来,屏幕显示的星期几与实际星期几相差3天。我们随机抽取了几个日期,验证了这一猜测。
推测这个bug来自系统采用了两套星期几的算法,具体原因计划在代码里面再好好看看。
``