搞過嵌入式開發的程序員一定知道有I2C總線,手機和電視中的主要串行技術,通過兩條線SDA,SCL解決總線傳輸,地址區分和熱插拔問題的技術。
可是就是這么一個簡單的東西,讓我這個自認為有些經驗的單片機開發者浪費了整整五個月!這還是我有比較充分的經驗,在一年半前就已經非常了解I2C協議的情況下!這段時間我花了無數的時間在調試,思考,解決問題而沒有一絲進展。反復的檢查問題,想要的結果死活不出來!昨晚的反思讓我今天早上我一大早起來第一件事就是調代碼,結果正確出來的時候,眼淚都快出來了。這篇文章,總結下這五個月來的問題,這五個月給我好好的上了一課。
五個月前,初步規劃方案階段:
我做的體感項目發展到了第四代,為了盡可能的減少尺寸和功耗,將原來的64腳IPM封裝的MSP430F149換成了更小,功耗更低的MSP430F2132。選擇該型號有顯然的好處:32QFN封裝,硬件I2C,自帶上拉電阻,16MHz的功耗更低。我們使用了原來所用的ADXL345加速計,MPU3050陀螺儀和HMC5883L的磁場計解決方案。在前一版的MSP430F149上是采用模擬I2C總線,而上述傳感器掛在這條總線上跑起來都毫無問題,只要焊接無問題,就一定能保證正確結果。而事實證明,這種自信確實是最后的罪魁禍首。
四個月前,第一版制作失敗:
換方案后,板子確實做得非常小,只有硬幣那么厚,小拇指那樣的細條。我們在設計上花費了很多精力,保證盡可能小的體積和封裝。PCB制版,焊接,上電,加速度計工作非常正常,而其他傳感器返回都為錯誤。我們一看這個情況,I2C出來啦!單片機沒問題!推斷只能是傳感器焊接問題。重新焊接,不行?那可能是布線和焊接問題。之所以考慮是焊接,是因為那種芯片非常難焊,所有管腳都在芯片屁股下面。如果技巧不夠,很容易出現焊接不良的情況,以前的多數問題都是焊接問題。
解決了一些小的布局問題以后,準備做第二次板。
兩個月前:第二版制作失敗:
第二版做出來之后,出現了更嚴重的問題,每次上電調試,第一次程序還能寫進去,第二次就不行了。再用萬用表測,電源短路。上面的所有傳感器都燒掉了!后來才知道,用的助焊劑非常好用,但導電!如果不洗干凈,就會出現短路的問題! 后來我們都把板子直接泡到酒精里。
新的問題又出現了,單片機工作很不穩定。經常出現調試寫入不正常,程序跑飛的情況,板子也會變得特別燙。用示波器一看,電源紋波相當大,在電源芯片旁邊的電容燙的不能用手碰。仔細分析,原來是我們使用的電容值沒有達到正常標準。這句話就在電源芯片PDF中的某一個非常不起眼的地方...更換以后,這部分沒問題了。
可是,I2C還是出不來!加速度計的0X00寄存器返回0XEF值,原本以為是對的,但實際上應該是0xE5;加上驅動程序一跑,發現加速度計根本沒正常工作!其他寄存器有的值讀出來是錯誤的,比如寫入0x3E,讀出來卻是0X5F.有些根本就不能讀!但磁場計卻能出來~陀螺儀永遠出不來! 這是為什么呢?既然磁場計能正確讀值,說明單片機和I2C總線軟硬件都沒問題,難道加速度計和陀螺儀芯片是假的??
我們罵了一遍那些“萬惡的”淘寶賣家,重新買了一批傳感器回來。因為硬件制作確實嚴格按照要求做了。我們高興的以為,這不是我們的問題,開心的等待著順豐把芯片送回來。同時,繼續改進電路,完成了第三版。
一個半月前:第三版的I2C依舊有問題:
芯片買回來了,新PCB到貨了,興沖沖的上電,發現問題依舊,磁場計能出來,加速度計問題依舊,萬惡的0xEF。陀螺儀還和往日一樣,完全沒反應。這下尷尬了!
焊接問題?!我們找了手機維修的大牛,仔細的給我們焊了一遍。同組的同學也認真的焊接好多板子,出現的還是一樣的問題。
軟件I2C問題?但為什么磁場計能出來?所以沒問題
電路問題?仔細查過,沒問題。所有的布線都OK,測試都聯通。
單片機?工作的挺正常啊,JTAG調試都沒問題啊,讓它輸出高電平就是高,輸出低就是低,上拉電阻乖乖的焊上了。我不認為它有什么問題。
所有的選項都排除了,我只能把它歸結到自身:你平時太墮落了,老天看不下去,故意讓你遇到這種最惡心的問題。那段時候,我極度迷信。事實上,這套系統我在PC端上開發了足夠強大的服務器端,采用了最新的技術和設計方法,幾乎硬件一調好,系統就能工作啊!各種應用接口,通信流量監測,識別算法,插件系統,自然交互界面,無所不用其極。這個項目不屬于我正常的工作范疇,算是“周末項目”,做著玩玩賺點小錢花,但并不表示我對它不重視。它讓我很有動力的學了很多的東西。有點意思的是,如果不是這套體感系統,我也不會這么鉆研.NET程序開發,也不會在博客園開博客。哈哈。
半個月前:絕望
就像前一段,按照我的邏輯把所有的問題都考慮了一遍(后來想,真的是這樣嗎?)依舊無果。我已經不知道怎么做了,我變的迷信癲狂不知所措。可能是這個項目本身給我帶來了太多的好處,老天已經覺得它應該退出我的人生舞臺了。
可是我真的能放棄么?花了那么多錢,當然錢是次要的,那么多時間和精力才是關鍵。如果現在放棄,原有的那些東西都沒有了任何價值,最多證明我學過某門技術。我的無數思考和結論都沒有了意義。 最主要的是,我困擾在了我原本認為最簡單的問題上,它不可能解決不了呀?!怎么回事!
好多次我11點多從實驗室回來,一晚上的時間繼續白費,還是出不來.....
我翻了好多技術資料,發了好多詢問帖,有人會幫我回答,但那些問題我都挨個排查過了,沒有問題啊、
我甚至不相信邏輯,覺得數學書上的證明都是扯淡,誰也沒告訴你1+1一定等于2。我生活在一個不可知的世界。
我會經常做夢,夢到傳感器都出來了,然后興奮的一塌糊涂,早上起來插上板子,發現問題依舊,還是"0XEF",還是錯誤的I2C!
我逐漸的將注意力集中在了單片機上面,是它的問題么?我雖然了解I2C協議,看過了各種可能的問題,并嚴格按照I2C協議寫了代碼。但我開始懷疑它在通信的時候到底做了什么。我為什么不用示波器看看波形呢?它輸出高低電平無誤就證明你該相信它么?
波形捕獲證明:它出現了中間電平。 數字電路只有0和1,不可能有中間電平這種東西!如果出現,只能是電阻分壓! 在與ADXL345通信時,這個問題表現得尤為明顯,MHC5883L通信時,中間電平變低了,正好落在了單片機能正確檢測的范圍之內。
那么,出現了不該出現的電阻,它在不合時宜的地方出現,分解了本該正確的電平值導致了單片機端口電壓檢測錯誤!電阻從哪來呢?我明明已經關掉了單片機的上拉電阻使能,按照PDF的說明,這應該也是沒有問題的。但肯定就是單片機問題!
昨天:心血來潮
正好是圣誕節,瘋玩了一天,晚上回來,還是決定去實驗室看看。將板子的I2C總線引出來,去掉CPU,接到了原來的MSP430F149軟件I2C引腳,上電,三個傳感器都毫無壓力的出來了。非常流暢和清晰!就是單片機問題!
換單片機?代價太大,如果換掉,那么所有的板子都要重做。而且原來的尺寸太大,所以原來的外觀設計都要推倒重來。如果這一步邁出去,我們五個月來的辛苦基本上都白費了。真的要這樣么?原來的程序沒問題啊!或許只能這樣了。
我不信,MSP430提供了硬件I2C,為什么不用硬件I2C試試看呢?原來嘗試過,但很奇怪所以沒有繼續深入。那我就要和你死磕。從晚上9點鐘開始到12點宿舍熄燈。找到了一份完整的關于硬件I2C的代碼模板,不過有些問題,明天繼續。
今天:成功!
6點鐘睡不著了,想著那些事情,我趕緊坐起來,趁著自己有些精神,趕緊看那些代碼。昨天晚上太累,好些地方寫錯了。修修改改,哦?有點意思啊。再改掉了中斷的代碼和其他的一些問題之后,加上驅動函數,加速度計正常工作!陀螺儀正常工作!磁場計正常工作!
究其原因,是MSP430F2132和MSP430F149的端口結構不一致導致的,2系列的單片機存在上拉電阻和一些額外的配置,導致一般的模擬I2C代碼移植到該單片機時,檢測高低電平的時候無法正確判斷。但硬件I2C不存在這個問題,只要外部加上拉電阻,就能正常工作,具體細節我還沒有仔細論證分析,等待幾天之后的分析結果。
那一刻,我有點暈,有點不想說話。反倒是很平靜。這種事情,從來都不會有那種“放著不動就能成功”的情形。但還是趕緊跑出去給隊友打了電話。興奮之情完全不用形容~原本這一刻,是準備在做好板子焊接完成后的五分鐘搞定的,我花了五個月時間。經歷了各種痛苦和無語,它今天總算出來了。項目因為這個問題卡的死死的沒有半點進展,如果早出來的話,現在幾乎已經做完了.....%>_<%
對這個成功,我真的無顏大肆渲染,這可能是一個本科生的簡單小實驗而已,把我足足干掉了五個月的時光。它不是什么歷史性時刻,它僅僅是一個普普通通項目的簡單開始而已,僅僅如此。
總結:
這部分可能是最本文關鍵的部分。我的盲目自信和粗心讓我在如此簡單的問題上困擾了整整五個月。這些問題讓我快崩潰。寫在下面的:
任何事情首先建立反饋,能讓我們真實的知道內部發生了什么,串口,調試JTAG,液晶屏,或者是示波器,邏輯分析儀,這些都是非常得力的助手。
不怕一個問題出錯,怕就怕在它是半對半錯性質的,對的那方面很容易讓你排除本身應該存在的問題,掩飾錯誤的真正原因,HMC5883L我恨你。
仔細看手冊說明!我什么時候學的壞毛病:喜歡跳讀,大致明白什么意思就行了。可是,那些問題就藏在原本跳過去的地方(不過對我這個問題,單片機手冊上還真沒說明,否則我真能看出來,但電源芯片配置不正確燒板子的事情,卻絕對有關聯)。
這個世界是有邏輯的,如果它出錯,那么肯定是有內在問題,上帝非常公平。
認真嚴謹的工作態度,詳細分析問題的能力——這兩句是我寫實驗報告時經常寫的,但我實際按照要求做了么?沒有!別人給你傳授經驗為什么很多情況沒用?來自真正努力地實踐,而這卻是好多人掛在嘴上而又特別缺乏的,包括我。多數問題真的都是個態度問題。
這個問題讓我險些放棄了整個項目,因為越來越大的實驗室壓力和考試壓力,讓我不知道該怎么走下去。實際上再過幾天調不出來,我就很可能放棄它了,它往后的故事也不會再有了,也更不會有這篇文章了。文章雖長,可我寫它的時間不超過調試上面那個問題的五十分之一。
這個問題雖然不大,但確實是自我出生以來讓我最無語的問題,仿佛死死的卡著脖子不能說話,痛卻說不出來。
我很感激陪伴我度過這五個月的隊友,我妹妹,還有好多關心我的人。我還相信一件事情,我雖然是黨員,但我也是“二元論”者,這個世界有物理規律支撐,同時,天在看,地也在看,努力工作,好好待人待己,這個世界都不會虧待你的。
上一篇:亞馬遜準備買下ZooX的,能否念好自動駕駛的生意經?
下一篇:msp430g2553的IIC通信
推薦閱讀
史海拾趣
隨著業務的不斷發展,Desco Tools公司開始積極拓展全球市場。公司利用其在防靜電技術方面的優勢,成功打入歐美、亞洲等多個國家和地區的市場。通過與國際知名企業的合作,Desco Tools公司的產品和解決方案得到了廣泛應用,為全球電子行業的發展做出了重要貢獻。
面對電子行業的快速發展和市場的不斷變化,Emulation始終保持著對技術的持續創新。公司不斷投入研發資源,推出了一系列具有領先性能的模擬和仿真產品,滿足了客戶對于高精度、高效率仿真工具的需求。這些產品不僅提高了工程師們的設計效率,還促進了整個電子行業的發展。
EUCHNER公司一直是一個家族企業,其企業精神和創新精神在家族成員中得以傳承。隨著公司的發展,EUCHNER逐漸擴張其業務范圍,不僅在歐洲市場建立了穩固的地位,還開始進軍全球市場。公司通過不斷的技術創新和產品升級,逐漸在工控配件領域建立了良好的聲譽。
隨著全球化的發展,EUCHNER公司開始實施國際化戰略,加強在全球市場的布局。公司在世界各地設立了多個分銷處和辦事處,以便更好地滿足不同國家和地區的市場需求。同時,公司還積極與國際知名企業建立合作關系,共同推動工業自動化領域的進步。通過國際化戰略和全球布局,EUCHNER公司的品牌影響力得到了進一步提升。
為了滿足全球客戶的需求,ELEMENT14致力于構建和優化全球供應鏈。公司與多家國際知名電子元器件制造商建立了長期穩定的合作關系,確保了貨源的穩定性和多樣性。同時,ELEMENT14還建立了全球物流體系,實現了快速、準確的物流配送服務。這些措施不僅提升了客戶滿意度,也增強了公司在全球市場的競爭力。
安美通非常重視企業文化建設和團隊建設。公司倡導創新、務實、合作的企業文化,為員工提供了一個寬松、自由、充滿激情的工作環境。同時,公司還積極開展各類培訓活動,提升員工的專業素養和綜合能力。這些措施使得安美通的團隊更加團結、高效,為公司的持續發展提供了有力的保障。
這五個故事雖然只是安美通發展過程中的一部分,但它們充分展示了安美通在電子行業中不斷努力、創新、拓展的精神和成果。未來,安美通將繼續秉承這種精神,不斷推動公司的發展和進步。
摘 要:本文基于RS485總線,以ARM微控制器LPC2138為核心構建了一個分布式控制系統,依靠ARM微控制器的強大的控制處理能力和豐富的外設,實現了智能化的控制和更大程度的系統集成,文中給出了部分電路圖,闡述了系統中引入的無極性連接和IAP(在應 ...… 查看全部問答∨ |
|
$(\'swf_u6M\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMTQ1MTUyMDgw/v.sw ...… 查看全部問答∨ |
|
我現在在把官方的 5.0bsp移植到我的mini2440 上發現當下載完nk后串口打印信息到這句就結束了 系統應該死機了 我在debug版本下也看到這種情況到那句就死機了 下面是我的debug信息 是什么原因導致的啊 Microsoft Windows CE ...… 查看全部問答∨ |
|
某程序在一個實時系統(200M CPU,50MSDRAM)中已經最優化了,換到另外一個系統(300M CPU,50M SDRAM)中是否還需要優化,為什么? 某程序在一個實時系統(200M CPU,50MSDRAM)中已經最優化了,換到另外一個系統(300M CPU,50M SDRAM)中是否還需要優化,為什么? 請知道的趕緊回答啊!… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 半導體品牌知名度問卷調查
- 上演你的“ADI實驗室電路”DIY!
- 下載有禮|是德科技電子書 《通過了解測試精度的基礎知識, 提高良率并降低風險》,不做“差不多先生”
- 下載《Altera SoC深度體驗》,打分評論贏好禮
- 【已結束】 Qorvo、村田、NI直播【UWB最新技術、方案、市場、應用解析】(13:30開始入場)
- TI 最新CapTIvate™ 觸控微控制器技術直播開始報名嘍!報名參與有禮呦!
- 老T叔的藏書閣——一位老工程師多年的資料積累
- 有獎直播【Keysight World Tech Day 2023分論壇——汽車自動駕駛與新能源】
- #最能打國產芯#能打入汽車電子這片地的國產芯,有多少啦?
- 新年新挑戰:ST藍牙開發板免費申請評測+挑戰賽(littleshrimp帶隊)