2007年9月8日 星期六

測試SPI以及撰寫Share Memory的FU

記得早在暑假前,就有人一直在唉說SPI的測試要快點
那時候的我,還是個傻傻不曉得SPI是蝦米碗糕的人@@
好像是個和I2C類似的介面,用來控制晶片的,可是看線路圖也沒有說接到任何的裝置呀
為此我還寄信去問嵌入式系統的教授....

後來,才知道是有接晶片的
控制的方法也頗單純的,但是重要的是它不像I2C一樣Davinci包好Driver了@@
需要自己寫控制流程,找了很多解法(在討論區)...最後卻還是放棄那些解法
努力的K SPI的Data Sheet然後自己填Register實在多了

記得一開始是測試一顆88347(DAC)
用三用電錶量電壓看有沒有輸出就曉得是否控制成功
撰寫之初失敗是一定的,不過還是很不爽@@...暑假一開始為了這個搞一會
還跑去找Mashe量完整的訊號,後來發現是自己Pin的Enable設錯了XDD,原來算錯位元所以填入的值是錯的,導致SPI_DI是沒有Enable... = =...難怪不管有沒有接晶片收到的訊號都是1...

後來調好之後,很開心的測試出來
不過介面做的很蠢XDD


咳咳...後來的SPI才是最挑戰的。接到Sensor Board上,利用SPI送訊號去控制
這可花了快兩個月才終於測出來...當然期間有很多事情所以有停擺過
不過想到一路走來的這些測試,感慨頓然壓上心頭...
從一開始的失敗 -> 發現排線拿錯 -> 不停的研究Clock的給法以及Data Format -> 失敗 -> 研究SPI的動作流程以及所有訊號如何送出的關係 -> 失敗.....

後來終於有一次,居然發現是Sensor Board和DSP Board上面的PIN腳沒有對應= =,input接對方的input,output接對方的output...媽呀!!!難怪一直失敗,瞬間有點怒



差點沒氣死...
後來修正之後,一接,就成功了T_T
困擾這麼久的SPI測試終於也到一個段落了
漫漫長夜內,失敗總是與我同眠。回身一腳,滾回床下貼冰地板吧XDD


好開心



之後做的最辛苦的就是改Encode和Streaming Server的資料傳輸方法
改成Share Memory
媽呀,做一個Queue這個樣子還真難@@
一個長陣列,Maintain front和rear,每一次add資料的長度和delete資料的長度不一樣
普通還好,環狀Queue在尾巴的判斷真是超難的!不但儲存陣列的index很難調,front和rear要怎麼比也有夠給她複雜的...測試了好久才有一些成果
不過也發現到,Semaphore的影響...像這種長時間一直跑資料量又大的程式,說真的很容易因為自己思考的小Bug而發生許多不一樣的錯誤情形

無論是資料的完整、之前發生的delete wait牽引住add wait等事情,能夠完整的像現在這樣有個穩定的版本釋出給Michael,自己是很開心的。更重要的是,發現了許多以前寫Share Memory的錯誤使用方式呢。

對了,這程式一開始測試都失敗
為什麼呢?因為環狀佇列的重點運算子 -> %(取餘數)
居然沒有用=口=
嚇傻我了,可能是CPU實做還是GCC版本的問題?

不過這點小困難一下就被解決了

無論如何,有個成功的輸出,我還是開心XDD

0 comments: