在嵌入式產(chǎn)品的開發(fā)中少不了各種外圍設備的搭配使用。嵌入式開發(fā)中需要做到將加入系統(tǒng)的外設連接起來,并能夠完成所需要的功能開發(fā)。
在眾多的設備中,MCU與外設進行通信都是按照一定的協(xié)議進行的,都涉及到時序,只有按照約定好的協(xié)議才能進行通信。
比如,常見的 1-Write單總線、IIC總線、SMBus總線、SPI總線等等的協(xié)議,都是需要在約定的通信協(xié)議下才能完成通信。而通信協(xié)議的實現(xiàn)反饋到MCU的時候,就只是一種IO口電平的變化輸出,以及外設傳送數(shù)據(jù)到MCU也是一種電平的變化或者是電平的時間寬度變化。
筆者在項目開發(fā)中就遇到過和外設通信中需要測量波形的變化確認數(shù)據(jù)狀態(tài)的情況,遇到過一些小問題,隨即記錄下來分享一下調(diào)試心得,也做一個備忘。
情況是這樣,項目開發(fā)中,有一個外設需要加入到系統(tǒng)中,這個外設是由生產(chǎn)廠商規(guī)定好了通信協(xié)議的,收發(fā)數(shù)據(jù)都要按照協(xié)議的規(guī)定進行,MCU接收數(shù)據(jù)的規(guī)定如下:
在通信總線上的低電平期間,有20mA的電流變化時外設回復數(shù)據(jù)“1”,沒有電流變化為數(shù)據(jù)“0”。
電流的變化通過硬件電路轉(zhuǎn)換成電壓的變化,MCU通過AD檢測進行判斷,從而得知數(shù)據(jù)的變化狀態(tài)。按照我們思路,MUC在低電平期間檢測到電流的變化啟動AD檢測,根據(jù)AD值確認數(shù)據(jù)狀態(tài)。如下圖示:
偽代碼示意如下:
while( !GPIO_Check_Pin ) // 通過電平變化確定電流變化
{
uint_32 adValue = 0;
if( GPIO_Check_Pin )
{
adValue = getAdValue(); // 讀取AD值
if(adValue > x)
xxx;
}
}
一般到這里認為應該也就算是完成了,可是在實際測試中發(fā)現(xiàn),獲取得到的AD值跟電路上實際的電壓是有很多的出入的,測量總是不準確。
苦思冥想,多次測量之后發(fā)現(xiàn),原來跟時序的變化有關。原因到底什么呢?
原來,正常的想法都是波形變化之后進行測量,而沒有考慮過波形的變化在不同的處理器上差異,以及硬件本身的延遲,往往不會立即就能發(fā)生翻轉(zhuǎn)的,有一個變化的過程的。
比如,理想的時序波形變化是這樣的:
然而,實際的時序波形變化是這樣的:
所以,在波形發(fā)生變化的時候就進行測量,很多時候往往得不到正確的結(jié)果,可以測量的電位點都不對,測量發(fā)生在了電平變化的期間。
所以,要準確測量,合適的方法是等待一段時間,電平變化穩(wěn)定之后再進行測量,結(jié)果就更加證實準確。如下:
所以,偽代碼示意如下:
while( !GPIO_Check_Pin ) // 通過電平變化確定電流變化
{
uint_32 adValue = 0;
if( GPIO_Check_Pin )
{
delay();
adValue = getAdValue(); // 讀取AD值
if(adValue > x)
xxx;
}
}
很多的嵌入式系統(tǒng)中,考慮到成本、工藝、實用性等的因素,很多的處理器都不會實用很強大的MCU,主頻可能都比較低,性能有限,很多的外設反應速度可能也不及MCU,所以延時等待在很多時候都很有必要。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
嵌入式
+關注
關注
5082文章
19104瀏覽量
304794 -
外設
+關注
關注
0文章
40瀏覽量
11691 -
系統(tǒng)
+關注
關注
1文章
1014瀏覽量
21332
發(fā)布評論請先 登錄
相關推薦
嵌入式NVM在應用中要注意什么?
工藝兼容、功耗及成本控制等新的問題。為此,本文以一款電力網(wǎng)控制芯片R36的物理設計為例,討論了嵌入式NVM在實際應用中需要注意的問題,并給出了解決方案。
發(fā)表于 11-04 06:55
設計嵌入式硬件時需要注意哪些問題?
嵌入式開發(fā)項目中,首先需要做需求分析,然后根據(jù)需求分析進行綜合考慮,這里給出幾個嵌入式硬件設計時特別要注意的問題。
發(fā)表于 03-11 07:21
嵌入式系統(tǒng)設計時需要注意的技術要點和實現(xiàn)細節(jié)有哪些?
為什么需要safe mode?嵌入式系統(tǒng)設計時需要注意的技術要點和實現(xiàn)細節(jié)有哪些?
發(fā)表于 04-25 08:49
嵌入式系統(tǒng)工程化設計要注意哪些方面
計算機設計,提高可靠性有那些方面工程化要求?設計要注意那些方面?下面按照兩個方面來介紹,一,把嵌入式計算機簡化到最簡化模型,看看需要注意那些方面。二,面對
發(fā)表于 11-08 06:51
PCB工程師需要注意的地方
PCB工程師需要注意的地方:PCB工程師需要注意的地方較多的PCB工程師,他們經(jīng)常畫電腦主板,對Allegro等優(yōu)秀的工具非常的熟練,但是,非??上У氖?他們居然很少知道如何進行阻抗
發(fā)表于 09-13 10:45
?0次下載
設計嵌入式系統(tǒng)硬件電路時需要考慮哪些問題
設計以MCU為核心的嵌入式系統(tǒng)硬件電路需要根據(jù)需求分析進行綜合考慮,需要考慮的問題較多,這里給出幾個特別要注意的問題。
嵌入式硬件設計中需要注意的事項
我們知道,CPU是這個系統(tǒng)的靈魂,所有的外圍配置都與其相關聯(lián),這也突出了嵌入式設計的一個特點硬件可剪裁。在做嵌入式硬件設計中,以下幾點需要關注。
發(fā)表于 06-19 11:30
?888次閱讀
嵌入式設計需要注意什么問題
這些嵌入式系統(tǒng)必須長期使用相同的電源供電,才能降低反復出現(xiàn)的維護成本或避免最終用戶頻繁更換電源。
發(fā)表于 10-23 15:56
?869次閱讀
嵌入式里有關時序波形的測量需要注意的地方
在嵌入式產(chǎn)品的開發(fā)中少不了各種外圍設備的搭配使用。嵌入式開發(fā)中需要做到將加入系統(tǒng)的外設連接起來,并能夠完成所需要的功能開發(fā)。
發(fā)表于 05-20 15:41
?827次閱讀
評論