展讯调试总结

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开发-CSDN博客_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.csdn.net/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.摄像头移植

摄像头移植简述(sprd)_Android开发-CSDN博客

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开发-CSDN博客

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开发-CSDN博客_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阻值校准方法

参考rfg阻值校准方法_Android开发-CSDN博客

35.电流分解

参考通过电流分解来分析底电流异常_Android开发-CSDN博客

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模式

  • 17
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值