CTP固件升级接口技术规范3.0

CTP固件升级接口技术规范

一.        固件升级需求指引

调研用户,售后,工厂测试得到ctp的固件升级的基本需求如下:

1.    应用或shell命令可以强制下载ctp固件,包括降级的固件(降级固件不能重新开机,因为开机后会自动升级为软件集成的最新固件)。

2.    应用或shell命令可以要求ctp驱动升级自带的固件(如果自带的固件有多个版本,则升级到最新版)。

3.    应用或shell命令能够读取固件信息,包括版本号,名称等。

二.        整体结构框图

如上图,用户空间可以通过访问sysfs文件系统的方式与内核空间中fw_man模块进行通信,Fw_man模块与ctp模块以标准化的固件升级接口对接。用户空间传入给fw_man某种需求后,fw_man 将其分解成一条条ctp模块可执行的基本功能,然后按照一定的逻辑关系组合这些被分解后的基本功能。

 

三.        CTP驱动接口技术规范

1.Fw_man模块与CTP驱动的接口定义如下:

struct firmware_object{

//强制写固件函数指针,其中firmware是存放固件内容的指针,num为固件长度,要求固件升级动作ctp单独启动一个线程完成,相关函数应立即返回,不应有所堵塞。

      int(*write_firmware_from_sdcard)(u8 * firmware,unsigned long num);

      //固件自升级,要求升级自带的固件数组内容,要求升级最新版本的固件数组,要求固件升级动作ctp单独启动一个线程完成,相关函数应立即返回,不应有所堵塞。

int (*write_firmware_self)(void);

//读取固件ic供应商,名称,版本,固件id号等

      int(*read_firmware_profile) (char * ic, char * panel, char * fw_ver, char *cfg_id);

     //读取固件ctp升级状态

int (*read_firmware_update_state)(void);

  //ctp的名称,由ctp驱动分配

      char*firmware_name;.

      };

总之,Ctp应提供给fw_man模块以下几种接口功能:

( 1 )固件强制升级

( 2 )Ctp自升级

( 3 )升级时的状态

  0:The device updatessuccessfully.

  1:The device is updating.

-1:The device failed to update.

2:The device has not been found.

( 4 )固件的信息反馈

2.ctp的接口通过注册和注销的方式被fw_man添加和删除。

注册函数为:firmware_attach (struct firmware_object *obj);

注销函数为:firmware_dettach (struct firmware_object *obj).

这里须在ctp驱动中建立一个全局变量(struct firmware_object *fw_obj)用于向fw_man模块中添加和删除ctp对象。

这两个函数添加位置参考代码,以Gt9158为例:

( 1 )staticint tpd_local_init(void)

{

    attach_fw_man_init();

return 0;

}

( 2 )staticvoid __exit tpd_driver_exit(void)

{

… 

firmware_dettach(fw_obj->dev);

}

3.其他ctp相关接口参考(基于gt9158):

( 1 )static int ctp_write_firmware(u8 *firmware,unsigned long num){

      inti =0;

      intret;

      GTP_INFO("ctp_write_firmware\n");

      read_firmware_update_state= 1;

   ret =gup_init_update_proc_test(i2c_client_point, firmware, num);

   if (ret < 0)

   {

     GTP_ERROR("Create update thread error.");

     read_firmware_update_state = 2;

   }

      return0;

}

( 2 )int ctp_read_firmware(char * ic, char* panel, char * fw_ver, char * cfg_id){

ctp_get_pid(ic);

      ctp_get_vendor(panel);

      sprintf(fw_ver,"0x%x", ctp_get_vid());

      sprintf(cfg_id,"0x%x", ctp_get_cfg_id());

return 0;

}

( 3 )intctp_read_firmware_update_state(void){

             GTP_INFO("ctp_read_firmware_update_states\n");

      returnread_firmware_update_state;

}

( 4 )int ctp_write_firmware_self(void){

/*

  ......

      */

 return 0;

}

( 5 )intattach_fw_man_init(void)

{

      GTP_INFO("attach_fw_man_init\n");

      interr = 0;

      fw_obj= kzalloc(sizeof(struct firmware_object), GFP_KERNEL);//全局变量

      memset(fw_obj,0, sizeof(struct firmware_object));

      fw_obj->write_firmware_self= ctp_write_firmware_self;

      fw_obj->write_firmware= ctp_write_firmware;

      fw_obj->read_firmware= ctp_read_firmware;

              fw_obj->read_firmware_update_state= ctp_read_firmware_update_state;

      fw_obj->dev= 0;//可有可无,在fw_man中分配dev编号

      fw_obj->firmware_name= kzalloc(sizeof(char*), GFP_KERNEL);

      strcpy(fw_obj->firmware_name,"ctp9158");

      if(err= firmware_attach(fw_obj))

  {

         GTP_INFO("attach fail = %d\n",err);

  }

      returnerr;

}

( 6 )int dettach_fw_man_init(void)

{

int err = 0;

err =firmware_dettach(fw_obj);

return err;

}

四.        上层接口调用规范

由二的原理可知,上次接口通过访问sys文件系统操作与fw_man通信,sys文件系统路径为:/sys/class/fw_man/current/…

Sys文件系统为上层调用提供以下接口:

1.    强制升级命令接口:

接口名称: force(命令),data(数据)

路径为:/sys/class/fw_man/current/ force

使用方法:

(1)echo 1 > force       //开始写ctp固件标志

(2)cat 固件文件名 >data //传入ctp固件数据

(3)echo 0 > force      //写固件,结束

自升级命令接口;

接口名称:self

路径为:/sys/class/fw_man/current/self

使用方法:echo xx(任何) > self

例子:echo  1  >  self

2.    读取固件版本号

接口名称:version

路径为:/sys/class/fw_man/current/ version

使用方法:cat  version, 可以获取ctp的版本号和名称。

3.    读取ctp状态

接口名称:state

使用方法:cat  state, 可以获取ctp当前的状态。定义以下四种状态:

0:Thedevice updates successfully.

  1:The device is updating.

 -1:The device failed to update.

2:The device has not been found.

4.上层在固件升级时,要持有系统suspend lock,防止系统休眠,导致固件升级失败。应对用户有提示,固件升级时不能灭屏和断电,低电量的固件升级可能会失败等。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

五.fw_man基本功能程序流程图

1.Ctp注册到fw_man模块

 

 

 

 

2.强制固件升级流程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MTK TP固件升级的过程可以参考以下步骤和代码修改: 1. 首先,需要找到代码目录,其中需要修改的地方通常包括makefile、dts以及config文件。\[1\] 2. 在代码中,可以通过修改focaltech_config.h文件中的FTS_AUTO_UPGRADE_EN宏定义来启用自动升级功能。将其从0改为1即可。\[2\] 3. 另外,还需要替换固件内容。可以在focaltech_fhd_touch/include/firmware/fw_sample.i文件中进行固件替换。\[2\] 4. 在MTK kernel-4.14 TP驱动的初始化和工作流程中,涉及到的一些函数和文件包括main.c、gt9xx_driver.c、mtk_tpd.c、i2c.h、kthread.h、wait.h、gt9xx_update.c等。这些文件中包含了TP驱动的初始化、固件升级、中断处理等相关功能。\[3\] 综上所述,MTK TP固件升级的过程包括找到代码目录、修改相关文件、替换固件内容以及在驱动初始化和工作流程中进行相应的配置和处理。 #### 引用[.reference_title] - *1* [MTK 平台CTP bring up](https://blog.csdn.net/u010783226/article/details/115918271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MTK6765 安卓11 TP固件自动升级](https://blog.csdn.net/Kevin_857/article/details/121094919)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MTK 平台TP 驱动](https://blog.csdn.net/b178903294/article/details/115397676)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值