<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式系統(tǒng)的SD控制器設(shè)計實現(xiàn)

          嵌入式系統(tǒng)的SD控制器設(shè)計實現(xiàn)

          作者: 時間:2011-09-06 來源:網(wǎng)絡(luò) 收藏
          3 卡檢測與防抖動

          本文引用地址:http://www.ex-cimer.com/article/150261.htm

            初始化時,_nCD檢測引腳被設(shè)置為上升沿和下降沿觸發(fā),因此引腳電平發(fā)生變化時,都會有中斷產(chǎn)生。當(dāng)硬件產(chǎn)生中斷時,進(jìn)入核心ISR,對_nCD進(jìn)行檢測,返回相應(yīng)的中斷標(biāo)識碼,對于是插入還是拔出,則由驅(qū)動程序的IST來處理。

            由于SD卡插槽采用的是機(jī)械式開關(guān),在插拔卡的時候,機(jī)械開關(guān)斷開、閉合時會有抖動,導(dǎo)致SD卡檢測引腳的電平不穩(wěn)定,從而有可能引起對卡的狀態(tài)的誤判。這樣會導(dǎo)致加載上層驅(qū)動,初始化失敗造成宕機(jī)。為了使每次插拔只響應(yīng)一次,必須要采用相應(yīng)的方法來防止抖動,避開按鍵按下的抖動時間。

            在驅(qū)動程序IST里采用延時采樣的方法來避免抖動,同時也嘗試了多次采樣的檢測方法來避開用戶按鍵的抖動時間。

            延時采樣是IST在收到SD卡檢測事件以后,并不是立刻進(jìn)行引腳信號判斷,而是延時一段時間采樣,延遲時間要根據(jù)系統(tǒng)電路特性而定,然后檢測引腳信號,判斷插槽的狀態(tài)是卡插入還是拔出。多次采樣方法是IST在收到SD卡檢測事件以后,要對引腳進(jìn)行多次等間隔采樣,根據(jù)采樣出的多數(shù)電平信號的值來決定插槽卡的狀態(tài)。多次采樣的方法可以有更短的響應(yīng)時間,當(dāng)采樣出的電平信號多數(shù)值不能決定卡的狀態(tài)時,需要進(jìn)行重新采樣判斷。

            對于延時采樣的防抖動方法,必須考慮到的效率。

            ISR運行于系統(tǒng)核心態(tài),它的延時會影響整個系統(tǒng),導(dǎo)致用戶的輸入響應(yīng)時間過長,造成整體性能的下降。而WindowsCE的驅(qū)動程序是用戶態(tài)的DLL,作為用戶進(jìn)程來調(diào)度,因此在SDHost的驅(qū)動程序里防抖動,可保證系統(tǒng)整體性能不下降。

            對于上述兩種防抖動方法,我們進(jìn)行了連續(xù)插拔的測試,結(jié)果如圖3所示。測試結(jié)果表明,這兩種方法都取得了較好的效果,基本上解決了SD卡檢測的抖動問題。

            

          SD卡插拔宕機(jī)次數(shù)測試

            圖3 SD卡插拔宕機(jī)次數(shù)測試

            4 結(jié)語

            本文介紹的SDHost已經(jīng)應(yīng)用在工程實踐中,結(jié)果表明是靈活有效的,防抖動對于類似的也具有一定的借鑒意義。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();