linux驅動中觸屏ic韌體公升級

2021-07-12 05:42:57 字數 1989 閱讀 9823

**:

在驅動開發過程中,我們有時會碰到這種應用:比如說某款晶元的韌體不是固定的,是可以後期公升級的。那麼在每次系統開機時,需要做個檢測,如果檢測到提供了新的韌體,那麼在第一次開機時就公升級韌體。之後由於儲存了新的韌體版本號可供檢測,就不用再開機公升級了。

以一款i2c的觸控螢幕晶元為例,假設**商提供的新韌體檔名是us3x06eb_use.it,將該檔案放在觸控螢幕驅動.c的同目錄下,那麼需要做的就是在觸控螢幕的probe函式裡面加入對應的版本號檢測處理,並決定是否公升級。如果需要公升級,將目標韌體通過i2c寫入即可。

[cpp]view plain

copy

typedef

enum

e_upgrade_err_type;  

#define    fts_packet_length        2    //一次寫兩個位元組,作為乙個packet

static unsigned char ctpm_fw =            //載入目標韌體

;  static

int fts_i2c_txdata(u8 *txdata, int length)   //一次通過i2c傳輸多位元組資料

return ret;  

}  static

bool i2c_write_inte***ce(u8 *pbt_buf, int dw_lenth)    //通過i2c寫多個資料

return fts_true;  

}  static

bool i2c_read_inte***ce(u8 *pbt_buf, int dw_lenth)   //通過i2c讀多個資料

return fts_true;  

}  static

bool fts_register_write(u8 reg_name, u8 *tx_buf)     //往暫存器寫單位元組資料

;  write_cmd[0] = reg_name;  

write_cmd[1] = *tx_buf;  

return i2c_write_inte***ce(write_cmd, 2);  

}  static

bool fts_register_read(u8 reg_name, u8 *rx_buf, int rx_length)    //從暫存器讀多個資料

;  u8 cmd_len  = 0;  

read_cmd[0] = reg_name;  

cmd_len = 1;  

/*send register addr*/

if(!i2c_write_inte***ce(&read_cmd[0], cmd_len))  

if(!i2c_read_inte***ce(rx_buf, rx_length))  

return fts_true;  

}  e_upgrade_err_type  fts_ctpm_fw_upgrade(u8 *pbt_buf, int dw_lenth)   //程式設計燒錄細節不闡述,例項會在本部落格的續篇中列出

//將資料劃分成相應的packet,一次通過i2c寫入晶元中。有幾個問題需要注意:(1)要注意分包的銜接,資料長度未必恰好能劃分成整數個包,那麼最後乙個包要單獨

//處理;(2)資料校驗,比如說晶元帶自動異或校驗的話,一方面我們在傳送的過程中要及時進行資料校驗運算,另一方面在資料傳送完畢後,可以把這個校驗值跟校驗

//暫存器的值進行比較,從而判斷當前傳輸是否有效。

[cpp]view plain

copy

int fts_ctpm_fw_upgrade_with_i_file(void)  

static

int __devinit tpd_probe(struct i2c_client *client, const

struct i2c_device_id *id) //tp的probe函式

}  .............  

zForce紅外觸屏處理晶元驅動分析

zforce紅外觸屏處理晶元驅動原始碼有兩套,分別為linux android wince系統實現。我用的是linux系統,應用不是qt實現的,介面都是opengl實現,所以,要自行處理觸屏輸入控制。linux的觸屏驅動使用了input子系統,前一天已經做了乙個基本學習,現在分析一下驅動實現。硬體介...

linux USB觸屏無響應驅動出現EPIPE錯誤

linux觸屏無響應驅動出現epipe錯誤 使用的觸屏裝置是egalax通過usb接入的,使用的驅動是 kernel linux 3.10.y drivers input touchscreen usbtouchscreen.c。出現問題時觸屏沒有反應,hexdump dev input event...

linux驅動入門之觸控螢幕驅動

廢話不多說,直接上檔案 1.tq2440 ts sk.c include include include include include include include include include include include include include include include i...