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