概述:iCool(idea cool)手机是基于合宙Air722UG模块,移植LittleVGL,用lua脚本语言开发的一款5寸触摸屏手机产品。
目录
1.总体介绍
- icool手机支持功能如下:
1:支持一路音频输出(SPK))
2:支持Camera
3:支持mipi LCD,LVGL(7.11版本),触摸屏
4:支持SD卡
5:支持WIFI 天线,LTE天线
6:支持串口1和串口2,HOST 调试口
7:支持一路USB 2.0 高速接口(最高达 480Mbps)
8:支持一路(U)SIM卡
9:支持3个侧键
10:支持闪光灯,电源指示灯等 - 拥有iCool你可以进行以下操作:
1:快速了解和掌握LittleVGL相关内容,在操作中逐渐熟悉LittleVGL相关控件的功能
2:内置时钟,天气,计算器,音频,日历,二维码等软件的内容,满足手机部分基本功能需求
3:可自定义的添加iCool手机的内容,让繁琐的app制作变得更加的简单和快捷
…
2.准备工作
- 实物
- 开发板硬件资料
icool 原理图 PDF版本
icool硬件原理图和PCB (KICAD版本) - 环境搭建
usb驱动下载、安装,固件烧录等
3.功能介绍
3.1 开关机
Air722UG 的 USB 符合 USB2.0 规范,支持高速(480Mbps)、全速(12Mbps)模式和低速(1.2Mbps)模式。USB 接口可用于 AT 命令传送,数据传输,软件调试和软件升级。icool 支持通过Micro USB 供电,给电池充电,同时,软件控制模块 powkey 引脚,实现按键开关机功能。
- 相关管脚定义
管脚名 | 管脚号 | 复用 | I/O | 电压域 | 管脚描述 | 备注 |
---|---|---|---|---|---|---|
USB_DM | 12 | / | IO | / | USB 差分信号线负极 | USB2.0 High speed, 走线控制 90欧姆差分阻抗 |
USB_DP | 13 | / | IO | / | USB 差分信号线正极 | 同上 |
VBUS | 40 | / | DI | VBUS | USB 插入检测, Vmax=5.25V Vmin=3.3V Vnorm=5.0V ,Luat固件可触发充电开机 | icool 板上已经和vbat接一起,供电5V |
PWRKEY | 9 | / | DI | VBAT | 模块开机/关机控制脚, 内部上拉到VBAT | 1. 关机状态下把管脚拉低 1.2s 以上模块开机 2. 开机状态下把管脚拉低 1.5s 以上模块关机 |
- 代码如下(软件配置PWRKEY 管脚,实现模块开关机功能)
powerKey="255255"--powerKey 键值
local function keyMsg(msg) -- 键盘事件回调函数
if msg.pressed then
if msg.key_matrix_row..msg.key_matrix_col==powerKey then --判断为关机键
log.info("powerKey_按下")--短按按下事件
timerID = sys.timerStart(function()--长按事件
print("-----已经关机,长按再次开机--------")
rtos.poweroff() -- 真实关机
end, 2000)
end
else
if msg.key_matrix_row..msg.key_matrix_col==powerKey then--判断为关机键
log.info("powerKey_弹起")--短按弹起事件
if sys.timerIsActive(timerID) then sys.timerStop(timerID) end
end
end
end
rtos.on(rtos.MSG_KEYPAD, keyMsg) -- 注册按键事件
rtos.init_module(rtos.MOD_KEYPAD, 0, 0, 0) -- 实例化按键事件模块
- luatools 打印如图
3.2 侧键
icool手机右侧保留2个按键,可软件配置
- 相关管脚定义
管脚号 | 管脚名 | 复用 | I/O | 电压域 | 描述 | 备注 |
---|---|---|---|---|---|---|
16 | GPIO10 | SPI1_CS | IO/DO | V_GLOBAL_1V8 | GPIO/spi片选信号 | 不用则悬空 |
20 | GPIO22 | ZSP_UART_TXD | IO/DO | V_GLOBAL_1V8 | GPIO/调试串口,输出 CP log,波特率8Mbps | 不用则悬空 |
- 代码如下(检测侧键状态)
require "pins"
--定义状态
local stuList={"弹起","按下"}
--上按键回调函数
local function up(msg)
log.info("侧按键上", stuList[msg])
end
--下按键回调函数
local function down(msg)
log.info("侧按键下", stuList[msg])
end
--配置GPIO与相关回调函数
pins.setup(pio.P0_22, up, pio.PULLUP)
pins.setup(pio.P0_10, down, pio.PULLUP)
- luatools 打印如图
3.3 mipi大屏
随着智能化设备的发展,大屏,高像素似乎已经成为了一种主流趋势。这就要求模组必须可以有高速率传输的接口,传统的并口明显是无法胜任这项任务的,所以 iCool 采用了MIPI接口驱动屏幕,与传统的并口相比,MIPI接口传输速度更快,可以传输更大的数据量,功耗更低,同时抗干扰能力更强。MIPI 其实是一个比较新的标准,其规范也在不断修改和改进,目前比较成熟的接口应用有 DSI(显示接口)和CSI(摄像头接口)。CSI/DSI分别是指其承载的是针对Camera或Display应用,都有复杂的协议结构, MIPI 大屏采用的就是 DSI 接口。当然,显示屏的主要还是需要依靠代码编写完成内容显示。目前 LuatOS 具有两套显示接口,除了传统相对简单的 Display 接口外,还支持 7.11 版本的 LVGL 显示接口。有关 LVGL 的接口使用方法具体可以参考链接,这里不再展开。
- 相关管脚定义
管脚号 | 管脚名 | 复用 | I/O | 电压域 | 描述 | 备注 |
---|---|---|---|---|---|---|
34 | DSI_CKP | FLASH_CLK/I2S2_BCK | DO | V_GLOBAL_1V8 | MIPILCD时钟信号正极 | 仅限于Air722UG-NMM,其他型号不支持 |
35 | DSI_CKP | FLASH_CS/I2S2_LRCK | DO | V_GLOBAL_1V8 | MIPILCD时钟信号正极 | 同上 |
77 | DSI_D1N | FLASH_S0/I2S2_SDAT_IN | IO | V_GLOBAL_1V8 | MIPILCD数据信号1负极 | 同上 |
78 | DSI_D1P | FLASH_S1/I2S2_SDAT_OUT | IO | V_GLOBAL_1V8 | MIPILCD数据信号1正极 | 同上 |
79 | DSI_D0N | FLASH_S2 | IO | V_GLOBAL_1V8 | MIPILCD数据信号0负极 | 同上 |
80 | DSI_D0P | FLASH_S3/MODULE_STATUS/PWM_PWT_OUT/GPIO[5] | IO | V_GLOBAL_1V8 | MIPILCD数据信号0正极 | 同上 |
83 | VCC_LCD | / | PO | VCC_LCD | LDO输出,1.6-3.3V之间可调,默认电压是1.8V,IOmax=200mA开机后默认是关闭状态,通常用来给LCD供电 | 不用则悬空 |
- MIPI对走线要求比较严格,有关MIPI的走线规则,可以参考 MIPI走线的6大规则
- 屏幕背光使用的 AW9962E 芯片具体使用情况可以查看手册 AW9962E
- mipi屏90-5310A规格书
- 主要代码如下(日历效果,完整代码 点我下载)
module(..., package.seeall)
-- LCD
require "lcd"
-- 触摸屏
require "tp"
DEMO_BASE_CONT = nil
local data = {type = lvgl.INDEV_TYPE_POINTER}
local function input()
pmd.sleep(100)
local ret, ispress, px, py = tp.get()
if ret then
if lastispress == ispress and lastpx == px and lastpy == py then
return data
end
lastispress = ispress
lastpx = px
lastpy = py
if ispress then
tpstate = lvgl.INDEV_STATE_PR
else
tpstate = lvgl.INDEV_STATE_REL
end
else
return data
end
local topoint = {x = px, y = py}
data.state = tpstate
data.point = topoint
return data
end
function demoInit()
sys.wait(1000)
-- 日历
---[[
-- 高亮显示的日期
highlightDate = lvgl.calendar_date_t()
-- 日历点击的回调函数
-- 将点击日期设置高亮
function event_handler(obj, event)
if event == lvgl.EVENT_VALUE_CHANGED then
date = lvgl.calendar_get_pressed_date(obj)
if date then
print(string.format("Clicked date: %02d.%02d.%d\n", date.day, date.month, date.year))
highlightDate.year = date.year
highlightDate.month = date.month
highlightDate.day = date.day
lvgl.calendar_set_highlighted_dates(obj, highlightDate, 1)
end
end
end
-- 创建日历
calendar = lvgl.calendar_create(lvgl.scr_act(), nil)
lvgl.obj_set_size(calendar, 300, 300)
lvgl.obj_align(calendar, nil, lvgl.ALIGN_CENTER, 0, 0)
lvgl.obj_set_event_cb(calendar, event_handler)
-- 设置今天日期
today = lvgl.calendar_date_t()
today.year = 2018
today.month = 10
today.day = 23
lvgl.calendar_set_today_date(calendar, today)
lvgl.calendar_set_showed_date(calendar, today)
--]]
end
local function init()
lvgl.init(demoInit, input)
pmd.ldoset(8, pmd.LDO_VIBR)
end
sys.taskInit(init, nil)
- 界面效果展示
3.4 触摸屏
iCool 与其他智能手机相同,输入方式为触摸输入。可以识别点击,滑动等一系列用户操作,是用户的主要输入方式,iCool 的触摸屏是一个 I2C 设备,使用了模块的 I2C 的第二通道作为输入接口。通过解析 I2C 接口传回的数据,可以识别出对主屏键,任务键,返回键的点击操作,以及当前屏幕被点击的坐标点。数据传回的只有坐标点,滑动操作是依靠 LVGL 的输入接口识别。
- 相关管脚定义
管脚号 | 管脚名 | 复用 | I/O | 电压域 | 管脚描述 | 备注 |
---|---|---|---|---|---|---|
86 | I2C2_SCL | GPIO[14] | IO | V_GLOBAL_1V8 | I2C2 时钟信号 | 用作 I2C 时需外加 1.8V 上拉; 不用则 悬空 |
87 | I2C2_SDA | GPIO[15] | IO | V_GLOBAL_1V8 | I2C2 数据信号 | 同上 |
41 | VIB | / | PO | VIB | LDO 输出,3.0-3.3V 之间可调, IOmax=100mA , 开机后默认是关闭状态,通常用来控制 震动马达 | 不用则悬空 |
- 主要代码如下,完整代码 点我下载
require "bit"
local lcd_width = 480
local lcd_height = 854
local ispress = false
local last_x, last_y
x = 0
y = 0
local function tpPrase(data)
-- 第一个字节头信息为0x52
if string.byte(data, 1) == 0x52 then
local tmpl, tmph
-- 第2,3,4,5, 7全是0xff 表示release,其余表示press
if string.byte(data, 2) == 0xff and string.byte(data, 3) == 0xff then
if ispress == false then return false, false, -1, -1 end
ispress = false
-- log.info("ispress x,y ", ispress, x, y)
return true, ispress, x, y
end
-- x 11位, 第3字节为[0,7] 第2字节的[4,6]为[8,11] 转化坐标需要*width/2048
tmpl = bit.band(string.byte(data, 2), 0xf0)
tmph = bit.lshift(tmpl, 4)
x = tmph + string.byte(data, 3)
x = x * lcd_width / 2048
-- y 11位, 第4字节为[0,7] 第2字节的[0,2]为[8,11] 转化坐标需要*height/2048
tmpl = bit.band(string.byte(data, 2), 0x0f)
tmph = bit.lshift(tmpl, 8)
y = tmph + string.byte(data, 4)
y = y * lcd_height / 2048
if ispress == true and last_x == x and last_y == y then
return false, false, -1, -1
end
ispress = true
last_x = x
last_y = y
-- log.info("ispress x,y ", ispress, x, y)
return true, ispress, x, y
end
return false, false, -1, -1
end
local function open(id, speed)
if i2c.setup(id, speed or i2c.SLOW) ~= i2c.SLOW then
i2c.close(id)
return i2c.setup(id, speed or i2c.SLOW)
end
return i2c.SLOW
end
local function init()
-- 打开电压域
pmd.ldoset(8, pmd.LDO_VMMC)
-- tp使能管脚
pins.setup(pio.P0_11, 1)
-- 初始化i2c
if i2c.setup(2, i2c.SLOW) ~= i2c.SLOW then log.info("tp init error") end
end
local iskeypress = false
local keyid = 0
local keycb = nil
function tpkeyprase(data)
-- 菜单,home,返回键
if string.byte(data, 1) == 0x52 and string.byte(data, 2) == 0xff then
if string.byte(data, 6) == 0x01 or string.byte(data, 6) == 0x04 or
string.byte(data, 6) == 0x02 then
keyid = string.byte(data, 6)
if keycb ~= nil and iskeypress == false then
iskeypress = true
keycb(keyid, iskeypress)
end
end
if string.byte(data, 2) == 0xff and string.byte(data, 3) == 0xff and
string.byte(data, 6) == 0xff then
if iskeypress then
iskeypress = false
if keycb ~= nil then keycb(keyid, iskeypress) end
end
end
end
end
function cb(cb)
log.info("msg2238 cb ")
keycb = cb
end
function get()
-- 通过I2C读取数据8个字节
local data = i2c.recv(2, 0x26, 8)
-- 解析坐标参数返回valid,ispress,x,y
tpkeyprase(data)
return tpPrase(data)
end
init()
3.5 SPK
喇叭输出接口,可以直接驱动8欧姆喇叭
- 相关管脚定义
管脚号 | 管脚名 | 复用 | I/O | 电压域 | 管脚描述 | 备注 |
---|---|---|---|---|---|---|
103 | SPK+ | / | AO | / | Speaker 差分信号输出,可以直接驱动 8 欧姆 Speaker,最大输出功率0.9W,可以通过软件配置 Class-AB模式或 Class-D 模式 | 不用则悬空 |
104 | SPK- | / | AO | / | 同上 | 不用则悬空 |
- 代码如下(TTS播放音频)
require"audio"
require"common"
--播放tts测试接口,每次打开一行代码进行测试
--audio.play接口要求TTS数据为UTF8编码,因为本文件编辑时采用的是UTF8编码,所以可以直接使用ttsStr,不用做编码转换
--如果用户自己编辑脚本时,采用的不是UTF8编码,需要调用common.XXX2utf8接口进行转换
local ttsStr = "支付宝到账一个亿"
local function testPlayTts()
--单次播放,默认音量等级
audio.play(TTS,"TTS",ttsStr)
--单次播放,音量等级7
--audio.play(TTS,"TTS",ttsStr,7)
--单次播放,音量等级7,播放结束或者出错调用testcb回调函数
--audio.play(TTS,"TTS",ttsStr,7,testCb)
--循环播放,音量等级7,没有循环间隔(一次播放结束后,立即播放下一次)
--audio.play(TTS,"TTS",ttsStr,7,nil,true)
--循环播放,音量等级7,循环间隔为2000毫秒
-- audio.play(TTS,"TTS",ttsStr,7,nil,true,2000)
end
testPlayTts()
3.6 摄像头
-
支持一路 SPI camera 输入接口,可用于扫描、拍照等应用,最高像素 30W 像素,支持数据格式 YUV422, Y420, RAW8, RAW10,集成 GC0310 驱动
-
相关引脚定义
管脚号 | 管脚名 | 复用 | I/0 | 电压域 | 管脚描述 | 备注 |
---|---|---|---|---|---|---|
28 | CAMI2C_SCL1 | / | IO | V_GLOBAL_1V8 | Camera I2C 时钟信号, 也可用作通 用 I2C 接口 | 不用则悬空 |
29 | CAMI2C_SDA1 | GPIO[17] | IO | V_GLOBAL_1V8 | Camera I2C 数据信号, 也可用作通 用 I2C 接口 | 不用则悬空 |
61 | VCC_CAMD | / | PO | VCC_CAMD | LDO 输出,1.4-2.1V 之间可调, 默认电压1.8V, IOmax=100mA 开机后默认是关闭状态, 通常用来给 Camera 提供数字电压 | 不用则悬空 |
62 | VCC_CAMA | / | PO | VCC_CAMA | LDO 输出,1.6-3.2V 之间可调, 默认电压是 1.8V, IOmax=100mA 开机后默认是关闭状态, 通常用来给 Camera 提供模拟电压 | 不用则悬空 |
75 | CAM_RST | CSI_CKN | DO\DI | V_GLOBAL_1V8 | 重启 Camera\ MiPi Camera 时钟信号负极 | 不用则悬空 |
76 | CAM_SI0 | CSI_CKP | DO\DI | V_GLOBAL_1V8 | SPI Camer 数据输入 0 MiPi Camera 时钟信号正极 | 不用则悬空 |
98 | CAM_PWDN | / | DO | V_GLOBAL_1V8 | 关闭 Camera | 不用则悬空 |
99 | CAM_REFCLK | / | DO | V_GLOBAL_1V8 | Camera MCLK 时钟输出 | 不用则悬空 |
100 | CAM_SI1 | CSI_D0N | DI\IO | V_GLOBAL_1V8 | SPI Camer 数据输入 1/ MiPi Camera 数据信号 0 负极 | 不用则悬空 |
101 | CAM_SCK | CSI_D0P | DI\IO | V_GLOBAL_1V8 | SPI Camera 时钟输入/ MiPi Camera 数据信号 0 正极 | 不用则悬空 |
- 主要代码如下,camera-拍照 完整代码
local WIDTH,HEIGHT = disp.getlcdinfo()
require"pm"
require"scanCode"
require"utils"
require"common"
-- 拍照并显示
function takePhotoAndDisplay()
--唤醒系统
pm.wake("testTakePhoto")
--打开摄像头
disp.cameraopen(1,0,0,0)
-- --设置照片的宽和高像素并且开始拍照
-- --此处的第三个参数表示拍摄质量,默认50,100最好
disp.cameracapture(240,320,100)
-- --设置照片保存路径
disp.camerasavephoto("/testCamera.jpg")
log.info("testCamera.takePhotoAndDisplay fileSize",io.fileSize("/testCamera.jpg"))
--关闭摄像头
disp.cameraclose()
--显示拍照图片
if WIDTH~=0 and HEIGHT~=0 then
disp.clear()
disp.putimage("/testCamera.jpg",(WIDTH-240)/2,(HEIGHT-320)/2)
disp.puttext(common.utf8ToGb2312("照片尺寸: "..io.fileSize("/testCamera.jpg")),0,5)
disp.update()
end
sys.timerStart(takePhotoAndDisplay,100)
end
sys.timerStart(takePhotoAndDisplay,100)
-
拍照效果如图
-
摄像头扫描二维码功能,camera-扫描代码 点我下载
3.7 SD/TF卡
SDIO(Secure Digital Input and Output)全称为安全数字输入输出接口,在协议上和SPI类似,是一种串行的硬件接口,通信的双方一个作为HOST,另一端是Device,所有的通信都是由HOST端发送命令开始的,Device端只要解析相应的命令,就可以正常通信了。比较常见的应用是用来外接SD卡或者MicroSD Card(也叫TF卡)。 icool手机设计了TF卡槽,支持挂载SD卡,操作模块文件系统。
- 相关管脚定义
管脚号 | 管脚名 | 复用 | I/O | 电压域 | 管脚描述 | 备注 |
---|---|---|---|---|---|---|
97 | VMMC | / | PO | VMMC | LDO 输出,1.6-3.2V 之间可调, 默认电压是 3.1V, IOmax=150mA , 开机后默认是打开状态,通常用来给 MMC 供电 | |
69 | MMC1_DAT2 | / | IO | 同上 | SDIO 数据线 2 | |
68 | MMC1_DAT3 | / | IO | 同上 | SDIO 数据线 3 | |
21 | MMC1_CMD | / | IO | 同上 | SDIO 命令信号 | |
66 | MMC1_CLK | / | IO | 同上 | SDIO 时钟信号 | |
72 | MMC1_DAT0 | / | IO | 同上 | SDIO 数据线 0 | |
73 | MMC1_DAT1 | / | IO | 同上 | SDIO 数据线 1 |
- 代码如下(实现播放一首预存在卡中的歌,在卡中创建一个文件并写入内容)
sys.taskInit(
function()
sys.wait(10000)
--挂载存储卡,result为挂载结果,1为成功,0为失败
local result = io.mount(io.SDCARD)
log.info("挂载结果", result)
if result == 1 then
--判断存储卡中是否存在名为ahq.mp3的歌曲文件
local result= io.exists("/sdcard0/ahq.mp3")
if result then
log.info("文件存在")
--播放歌曲
audio.play(1, "FILE", "/sdcard0/ahq.mp3", 4, nil, false)
end
--判断存储卡中是否有test.txt这个文件,如果没有,则创建此文件并写入内容
local result = io.exists("/sdcard0/test.txt")
if not result then
log.info("创建文件")
local content = io.writeFile("/sdcard0/test.txt","测试测试,这里是sd卡测试")
log.info("content", content)
else
log.info("文件存在")
end
end
end
)
- 效果显示:把TF卡插到电脑上,可以看见,test.txt文件已经被写入了卡中
3.8 串口
- 模块提供了五个通用异步收发器:主串口 UART1、校准串口 UART2、通用串口 UART3、调试串口 HOST UART 和 ZSP UART。icool手机硬件上预留了串口1、串口2和HOST 调试口的测试点。
- 相关引脚定义
管脚号 | 管脚名 | 复用 | I/O | 电压域 | 管脚描述 | 备注 |
---|---|---|---|---|---|---|
91 | UART1_TXD | / | DO | V_GLOBAL_1V8 | UART1发送数据 | |
92 | UART1_RXD | / | DI | 同上 | UART1接收数据 | |
63 | UART1_RXD | GPIO_21 | DO / IO | 同上 | UART2发送数据 / 通用GPIO | |
64 | UART2_RXD | GPIO_20 | DI / IO | 同上 | UART2接收数据 / 通用GPIO | |
94 | HOST_TXD | / | DO | 同上 | 调试串口,输出AP log,波特率921600bps | |
95 | HOST_RXD | / | DI | 同上 | 调试串口,给模块发送调试指令 |
3.9 SIM卡
SIM 卡接口支持 ETSI 和 IMT-2000 卡规范,支持 1.8V 和 3.0V USIM 卡.
- 相关管脚定义
管脚号 | 管脚名 | 复用 | I/O | 电压域 | 描述 | 备注 |
---|---|---|---|---|---|---|
30 | USIM_CLK | / | DO | USIM_VDD | SIM0 时钟信号 | 模块可以自动识别 1.8V 或者 3V(U)SIM 卡 |
31 | USIM_DATA | / | IO | USIM_VDD | SIM0 数据信号 | 同上 |
32 | USIM_VDD | / | PO | USIM_VDD | SIM0 供电电源 最大供电电流 10mA | 同上 |
33 | USIM_RST_N | / | DO | USIM_VDD | SIM0 复位信号 | 同上 |
- 代码如下
require "pins"
require "sim"
require "net"
require"link"
require"socket"
----检测SIM卡
sys.subscribe("SIM_IND",function(status)
if status=="RDY" then
print("SIM卡正常")
elseif status~="RDY" then
print("SIM卡未准备好")
end
end)
----检测注册状态
sys.subscribe("NET_STATE_REGISTERED",function()
netMode=net.getNetMode()
if netMode==4 then
print("4G网络注册成功")
elseif netMode==3 or netMode==5 then
print("3G网络注册成功")
elseif netMode==1 or netMode==2 then
print("2G网络注册成功")
else
print("SIM卡注册失败,重启")
end
end)
sys.subscribe("IP_READY_IND",function()
print("数据网络激活成功")
end)
- luatools 打印如图
3.10指示灯
- icool手机共有两个指示灯,位于摄像头左侧,分别是绿色与红色,红色指示灯上电即常亮,无法使用软件控制,绿色指示灯由模块的GPIO_1控制,使用软件控制GPIO输出高低电平来使LED灯亮灭.
- 代码如下,(实现绿色小灯循环亮灭)当使用到MIPI LCD时,此脚无法配置为GPIO来使用
require "pins"
pmd.ldoset(2,pmd.LDO_VLCD)
local gpio_1 = pins.setup(pio.P0_1, 1)
local level = 1
sys.taskInit(function()
while true do
level = level == 1 and 0 or 1
gpio_1(level)
sys.wait(1000)
end
end)
3.11 闪光灯
- 相关管脚如下:
管脚号 | 管脚名 | 复用 | I/O | 电压域 | 管脚描述 | 备注 |
---|---|---|---|---|---|---|
50 | RGB_IB0 | / | OD | / | 开漏管脚,最大输入电流 100mA 恒流模式调节范围:1.68mA - 54.6mA, 一般用于控制 LCD 背光灯的 电流大小 | 不用则悬空 |
- 代码如下:
sys.taskInit(function ()
led=0
while true do
pmd.ldoset(led,pmd.LDO_VBACKLIGHT_R)
sys.wait(1000)
led=led+1
led=led%2
end
end)
3.12 马达(震动效果,软件尚未实现)
3.13 光学传感器(暂不支持)
3.14 天线
icool手机预留了两个LTE天线接口和一个WIFI天线接口,两个LTE天线分别为:ipex 3代接口天线,弹片接触式天线,默认使用ipex口天线,可通过电阻R22调换;WIFI天线为弹片接触式天线。
- 相关管脚定义
管脚号 | 管脚名 | 管脚描述 | 备注 |
---|---|---|---|
48 | LTE_ANT | LTE天线接口 | 走线需要控制50欧姆特性阻抗 |
37 | BT/WiFi_ANT | 蓝牙/WiFi Scan 共用天线接口 | 走线需要控制50欧姆特性阻抗 |
- 备注