1、基礎認識
乙個gpio腳配合軟體可以實現高,低,高阻三種狀態的區分,那麼最多可以實現三種指紋硬體的相容.
軟體邏輯:
1》先給pin乙個高電平,然後讀出該pin的電平到val1;
2》再給pin乙個低電平,然後讀出該pin的電平到val2;
若:val1 == 1 && val2 == 1 ==》pin外接高電平;
val1== 0 && val2 == 0 ==》pin外接低電平;
val1 == 1 && val2 == 0 ==》pin腳高阻態,或者懸空態;
**實現:
fp_pin = of_get_named_gpio(np, label, 0);
if (fp_pin <= 0)
// high
gpio_direction_input(fp_pin);
gpio_direction_output(fp_pin, 1);
val1 = gpio_get_value(fp_pin);
// low
gpio_direction_input(fp_pin);
gpio_direction_output(fp_pin, 0);
val2 = gpio_get_value(fp_pin);
klog("%s: (%d, %d, %d)\n", __func__, fp_pin, val1, val2);
if (val1 == 1 && val2 == 0)
else if (val1 == 0 && val2 == 0)
else if (val1 == 1 && val2 == 1)
else
2、原理推導如上等效電路圖分析:
vi 表示pin腳外接指紋模組的電壓,我們最終需要知道的結果就是這個電壓是高還是低;
vcc表示微控制器輸出高電平時候的等效電路;
v0表示微控制器讀取的電壓值等效電路
r1表示指紋模組接到gpio pin腳的限流電阻,這個值通常很小,大概是0-10歐;
r2表示微控制器輸出高電平時候的內阻,這個值通常也比較小以輸出功率6ma算,大概是(1.8v/6)*10^3=300歐,可以看出r2 遠大於r1
r3是微控制器對地阻抗,通常是幾k到幾十k歐,可以看出遠大於r1,r2
從以上推導:
v0 = vi/r1 + vcc/r2 - 1/r3 - 1/r2 - 1/r1
r1 << r2
r3 >> r2
場景1:
若vi接高電平:
那麼vi =1.8v,微控制器給高電平,那麼vcc = 1.8v,那麼:v0 ~= 1.8*(1/r1+1/r2) - 1/r1 -1/r2
由於r1 << r2,那麼v0的值主要是由r1決定,所以v0的值主要由vi決定,當r1==0時候,v0==vi
同理可證只要r1取值合適,不管vi接高電平還是低電平,v0的值主要由vi決定,可以判斷vi外接高電平.
場景2:
若vi接地呢?
那麼就跟下圖這個分析是一樣了,等價於上圖的r1跟r3併聯了(相當於下圖的r2),當r1<
場景3:
若vi接的模組懸空呢?
vi == 0
那麼v0 ~= vcc/r2 ==》,r2本身就是微控制器的輸出阻抗,如此當然是微控制器給高就是高,微控制器給低那v0就是低了。這個時候就可以判斷vi是懸空,也就是所謂高阻了。
基於硬體指紋的軟體加密和註冊技術
在軟體加密保護技術中,一種常用的保護方法就是基於硬體指紋進行許可授權,本文將詳細介紹硬體指紋的具體獲取技術,並提供一段演示源 程式。硬體指紋加密,指的是使用者免費得到軟體並安裝後,軟體從使用者的機器上取得該機器的一些硬體資訊 如硬碟序列號 bois序列號等等 然後把這些資訊和使用者授權進行繫結,產生...
基於硬體指紋的軟體加密和註冊技術
在軟體加密保護技術中,一種常用的保護方法就是基於硬體指紋進行許可授權,本文將詳細介紹硬體指紋的具體獲取技術,並提供一段演示源 程式。硬體指紋加密,指的是使用者免費得到軟體並安裝後,軟體從使用者的機器上取得該機器的一些硬體資訊 如硬碟序列號 bois序列號等等 然後把這些資訊和使用者授權進行繫結,產生...
delphi VMP加殼 自檢保護和硬體ID獲取
function pchwidmd5 string vmp硬體號,返回md5 varbuf array 0 127 of ansichar md5 tidhashmessagedigest5 begin vmprotectbegin hwid md5 tidhashmessagedigest5.cr...