1.IO配置
u-boot15/board/spreadtrum/xxx/pinmap-xxx.c
{REG_PIN_SDA2, BITS_PIN_AF(0)},
{REG_MISC_PIN_SDA2, BITS_PIN_DS(1)|BIT_PIN_WPUS|BIT_PIN_WPU|BIT_PIN_SLP_AP|BIT_PIN_SLP_WPU|BIT_PIN_SLP_Z},
REG_PIN_(管脚名字) 如gpio88,查找pinmap表格(XXX_GPIO_Spec_Vxxx.xlsx),就可以知道相应的管脚名。
BITS_PIN_AF(n) n=0,1,2,3功能 具体功能可参考XXX_GPIO_Spec_Vxxx.xlsx
BITS_PIN_DS 驱动能力(ata测试中导线长或者高速信号可以调整)
BIT_PIN_WPUS 强上拉(强是指电流,选择阻值较小的电阻)
BIT_PIN_NULL
BIT_PIN_WPU 上拉(初始电平为高)
BIT_PIN_WPD 下拉(初始电平为低)
BIT_PIN_NUL 没有上下拉
BIT_PIN_SLP_AP 跟随AP休眠
BIT_PIN_SLP_ALL 可能是跟随BP休眠
BIT_PIN_SLP_NONE 不休眠(维持休眠前的状态)
BIT_PIN_SLP_NUL 休眠时没有上下拉
BIT_PIN_SLP_WPD 休眠时下拉
BIT_PIN_SLP_WPU 休眠时上拉
BIT_PIN_SLP_OE 休眠时输出
BIT_PIN_SLP_IE 休眠时输入
BIT_PIN_SLP_Z 休眠时高阻
2.按键
gpio作为按键
配置为BITS_PIN_DS(1)|BIT_PIN_NULL|BIT_PIN_WPU|BIT_PIN_SLP_AP|BIT_PIN_SLP_WPU|BIT_PIN_SLP_IE},这个配置出错可能导致低电流大
keypad模块的按键
KEYIN作为为列
KEYOUT作为行
如KEYOUT0,KEYIN2,那么
sprd,row = <0>;
sprd,column = <2>;
像ums312和ums512规格书默认没有提供中断号,可以让展讯提供(实际是irq 67,驱动可使用9820e的)
3.lcd
xxx-common.dtsi包含的使用的默认屏
u-boot15/drivers/video/sprdfb/lcd/Makefile
u-boot15/drivers/video/sprdfb/sprdfb_panel.c
u-boot15/drivers/video/sprdfb/sprdfb_spi.c(spi的可能需要修改这里的SPI_RS(选择发数据还是命令)脚)
u-boot15/include/configs/xxxx.h
如果使用spi类型的屏,spi这个展讯这里默认是收发用一根线的,当然也可配置成标准的SPI线
如果开启了te脚检测spi_te_gpio,屏也要开启te,否则会出现卡顿的情况
平台支持读寄存器方式的esd,但在某些屏上会有异常,表现为随机闪屏,出现分屏。
4.增大音量,工具Audiotester,可参考
https://wenku.baidu.com/view/e454011a580216fc700afdf3.html
5.当按键或触摸屏不好用时,可安装应用Vysor来控制屏幕(ubuntu系统可以在谷歌浏览器安装Vysor插件)或者安装scrcpy同屏工具
GitHub - koush/vysor.io: Vysor - Mirror and Control your Phone
GitHub - Genymobile/scrcpy: Display and control your Android device
6.调整分区大小
直接修改device/sprd/sharkle/xxx/xxx.xml中size的大小(这里单位是M),同时修改BoardConfig.mk镜像的大小。
7.编译与烧写
编译uboot make bootloader
烧写uboot fastboot flash uboot u-boot-sign.bin
烧写system sudo fastboot -S 100M flash system system.img
Android9.0出现了dtb和dtbo镜像,编译方法make dtbimage ,make dtboimage ,烧写方法
fastboto flash dtb dtb.img
fastboot flash dtbo dtbo.img
也可以使用展讯工具ResearchDownload,勾选fdl1和fdl2和相应的镜像,来烧写相应的镜像。
Android11对应的fastboot烧写方式
fastboot flash uboot_a uboot u-boot-sign.bin
fastboot flash dtbo_a dtbo.img
fastboot flash:raw boot_a boot-debug.img
对应Android11,如果通过adb reboot autodloader进入单烧模式,要勾选SPL_LOADER,因为这种方式默认把spl擦除了,会不断进入刷机模式。
8.gpio和ldo调试
cat /d/gpio可以查看引脚状态,包括gpio_request有没有申请成功,引脚现在的状态(输入或输出,高电平或低电平)
gpio-49 ( |xxxx1 ) in(输入) hi(高电平)
gpio-138 ( |xxxx2 ) out(输出) lo(低电平)
/d/regulator可查看ldo的使用情况,以及配置的最大和最小电压
如常开sim2这路ldo,kernel对这路ldo不要去控制
在uboot下ldo_sleep.c文件dcdc_ldo_power_on(void)函数,
1.添加regulator_enable("vddsim2");
2.ANA_REG_SET(ANA_REG_GLB_SLP_LDO_PD_CTRL0,
下屏蔽掉//BIT_SLP_LDO_VDDSIM2_PD_EN |
9.暗码
*#*#83781#*#*,进入工程模式(EngineerMode.apk)
*#*#83789#*#*,测试模式
*#*#2266#*#*,进入sgps测试,选择INF,打开sgps switch,可在SA见到卫星信号。
adb shell am start -n com.sprd.validationtools/com.sprd.validationtools.ValidationToolsMainActivity
adb shell am start -n com.sprd.engineermode/com.sprd.engineermode.EngineerModeActivity
10.cat /proc/meminfo只能看到部分内存容量(有部分没算在这)
11.展讯网站
提问题IBM Rational ClearQuest
资料Uni-support
12.EXINT的管脚有硬件去抖的功能,如使用EXINT12,pinmap配置成EXINT12,
gpios = <&ap_eic 12 1>;
13.刚开机,串口打印一点就停止输出了,找到对应的dts文件,将loglevel=1改成loglevel=8或者adb shell,
echo 8 >/proc/sys/kernel/printk
最新的下载工具已支持在下载时,选定printk的等级,不需要修改软件
14.测试休眠底电流的时候,userdebug版本要关闭modem log,否则无法正常休眠。
15.展讯平台sysdump 展讯平台sysdump解析_Android开发-优快云博客_sysdump
16.nv
对于Android10(更低版本)射频和通话参数存放于sharkle_pubcp_customer_Feature_Phone_nvitem.bin
对于Android11,对于多数平台,通话参数开始跟nv分离(放ap侧)
读取nv
手机先关机,然后先打开Pandora,点connect,然后将手机连接到电脑,等待连接成功,然后关掉Pandora。在打开NVTOOL/NVEditor,先打开同版本的任意一个nv工程,然后选择File->Load From Phone,选择对应的端口就行。
17.进入usb下载方式(这里的加号是短路的意思)
1.KEYIN0+KEYOUT0;2.KEYIN0+GND;3.U1TXD+GND
18.spi串口屏可以读寄存器来实现esd protect,可以让展讯提供补丁,实际效果不好,多数还是包导电布,来提高抗静电能力 。
19.配置内核kuconfig/kmconfig/kdconfig
20.展讯工具介绍
https://blog.youkuaiyun.com/qq_23922117/article/details/81144364
21.pwma,pwmb,pwmc的基地址分别是0x40260000,0x40260020,0x40260040,dts默认只配置了一路
pwma有多个引脚可以设置,但只能选其中一个作为pwma(pwmb,pwmc类似)。对于背光使用非默认pwm,需要进行修改uboot,路径u-boot15/board/spreadtrum/xxx/sprd_bl.c,默认是这样
#define PWM_INDEX 1
__raw_bits_or(((PWM_INDEX << 1) << 4), REG_AON_APB_APB_EB0); //PWMx EN
即第一路pwm,假如要使用第0路,需配置成
#define PWM_INDEX 0
__raw_bits_or(((1 << PWM_INDEX) << 4), REG_AON_APB_APB_EB0);m
参考
22.抓取modem日记的时候,由于sdcard的log可能会丢失,可以用展讯的Logel_for_TD工具来抓取(该工具在源码压缩包下,进入工程模式,打开pc service,然后通过连接手机,复现现象,保存log即可)。
23.摄像头移植
24.在虚拟机上运行bbat工具
由于平常在linux下工作,bbat工具只能在window上运行,先运行bbat工具,手机断电接usb,见出现的usb未知设备(Virtualbox会提示未知设置,不能分配到虚拟机)分配到虚拟机上即可。
25.EXINT
EXINT部分建议参考:GPIO和EIC客制化指导手册V1.4.pdf
26.不带NTC电池
开机状态无法充电
去掉battery-det-gpios = <&pmic_eic 9 0>;
关掉温度支持 temp-support = <0>;
低电量无法充电
u-boot15/drivers/power/battery/sprd_chg_helper.c
int sprdbat_is_battery_connected(void){
return 1;
}
27.adb调整寄存器的值
lookat -l 1 0x2334000//查看
lookat -s 0x2334000 0x00000001//设置
28.引脚跟控制器重新分配
比如有5组i2c控制器,但有11组i2c引脚,由于一组控制器只能对应一组i2c引脚,这时需要修改pinmap的REG_PIN_IIC_MATRIX_MTX_CFG寄存器,
如默认配置如下{REG_PIN_IIC_MATRIX_MTX_CFG,0x00000010},//IIC0->AP_IIC0;IIC1->AP_IIC1;IIC2->SP_IIC0;IIC3->AP_IIC3;IIC4->AP_IIC4;IIC5->AP_IIC5;IIC6->AP_IIC6;
同样的还有uart,i2s,spi等 。
29.平台默认的i2c控制器驱动有引起系统开机定屏的风险。
Linux下wait_for_completion引起的开机定屏_Android开发-优快云博客
30.指示灯控制
cd /sys/class/leds/sc27xx:blue/
打开指示灯
echo 255 >brightness
打开呼吸灯
echo pattern > trigger
echo 50 255 875 255 75 255 1000 255 > hw_pattern
格式 rise_time brightness higt_time brightness fall_time brightness low time brightness >trigger ,单位为毫秒
31.Android10提示remount失败的处理方法
Android高版本remount方法_Android开发-优快云博客_android remount
32.ts休眠流程
Android10之前是随lcd进入休眠(注册内核通知链,接收通知)
Android10以后(包括),默认会写节点的方式进入休眠和唤醒(/sys/touchscreen/ts_suspend),如
static ssize_t ts_suspend_show(struct device *dev,struct device_attribute *attr, char *buf)
{
}
static ssize_t ts_suspend_store(struct device *dev,struct device_attribute *attr, const char *buf, size_t count)
{
if ((buf[0] == '1'))
ts_suspend();
else if ((buf[0] == '0'))
ts_resume();
return count;
}
static DEVICE_ATTR_RW(ts_suspend);
33.sensor移植
非sensorhub架构(sc9820e,sc9832e,sc7731e,sc9850k),sensor采用input事件汇报给系统
sensorhub架构(sc9863a,ums312,ums512,ums512t,部分sensor需要动态加载的方式去加载驱动,可参考Android 11.0 EmBitz编译Sensorhub动态加载驱动介绍V1.3.pdf
当然,sensorhub架构改非sensorhub架构也是支持的(主要是某些sensor(没有其他可替代的)没有适配展讯的sensorhub架构,推动厂商研发麻烦且开发周期长,硬件上不需要修改)
34.rgu阻值校准方法
35.电流分解
参考通过电流分解来分析底电流异常_Android开发-优快云博客
36.查看Modem版本号
输入*#*#83781#*#*进入工程模式,选择DEBUG&LOG-->System Info-->Version Info-->
Modem Version (这个看不到,可能是使用的Modem不对或者硬件异常 平台也有bug,配单卡会导致这个读不到)
DSP Verion
CP2 Version
37.[FAQ202172834]电量显示的校准如何设置
first-calib-voltage——第一校准点电压,mV,通常取2%的OCV
first-calib-capacity——第一校准点容量,默认取4%。
voltage-min-design-microvolt——校准电压,mV,一般设置为1%电量时的OCV电压。
38.必看文档
UNISOC_Debug_Guide--下载、开机篇_V1.1.pdf
各平台的单软多硬文档,如UMS512T_Single_Software_For_Multi-Hardware_Application_Note_V1.2.pdf
GPIO和EIC客制化指导手册V1.4.pdf
39.外置wcn bug
1.代码注释有误(A10-A12)
拿到的代码
bsp/bootloader/u-boot15/board/spreadtrum/ums512_1h10/ums512_1h10.c
static const int wcn_crystal_type[] = {
0,/*TSX*/
1/*TCXO*/
};
但文档里的描述是这样的
static const int wcn_crystal_type[] = {
0,/*TCXO/
1/*TSX**/
};
cat gnss_clktype可以看到时钟类型,这个配置有误,到导致导航有偏移。
static ssize_t gnss_clktype_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
int i = 0;
enum wcn_clock_type clktype = WCN_CLOCK_TYPE_UNKNOWN;
clktype = wcn_get_xtal_26m_clk_type();
GNSSCOMM_INFO("%s: %d\n", __func__, clktype);
i = scnprintf(buf, PAGE_SIZE, "%d\n", clktype);
return i;
}
2.设置loglevel=7后(下载工具里选择7后,下载工具会提示),做开关机测试,会概率进sysdump模式