基于I2C總線數(shù)據(jù)寫入器的設計
(1) PC方的寫入線程
流程見圖3。在寫入線程被創(chuàng)建后,它將向MCU發(fā)送寫命令CMD_WRITE,然后等待MCU的回應RSP_WRITEREADY。成功收到該回應后,寫線程將以CMD_WRITE為命令向MCU發(fā)送數(shù)據(jù),每發(fā)送一組,寫線程都會等待MCU回應RSP_WRITTEN,成功收到這個回應后,寫線程繼續(xù)發(fā)送后面的數(shù)據(jù)。寫入完成時,寫線程發(fā)送寫入結束命令CMD_OVER,并等待MCU回應RSP_FIN以確認完成了寫操作。成功收到此回應后,將彈出提示。
寫入線程與界面線程的通信通過向界面線程發(fā)消息來實現(xiàn)。寫入線程可發(fā)如下的消息:WM_ _WRITEOVER,WM_ _BLOCKFINISH,WM_ _COMMFAILED。
WM_ _WRITEOVER消息提示界面線程寫入已經(jīng)結束。這時界面線程啟用校驗和讀出按鈕,禁用寫入按鈕,向消息框里加入一條寫入完成的消息。
WM_ _BLOCKFINISH提示界面線程一個數(shù)據(jù)塊 操作已經(jīng)完成,界面線程在接收到這條消息后設置進度條,以顯示當前的進度。
WM_ _COMMFAILED提示界面線程通信失敗,讀出按鈕可用,寫入不可用。
(2) PC方的讀出線程
流程見圖4。在讀出線程被創(chuàng)建后,它將向MCU發(fā)送寫命令CMD_READ,然后等待MCU的回應RSP_READREADY。成功收到回應后,讀線程將發(fā)送CMD_READ命令到MCU,并接收MCU返回的數(shù)據(jù)。成功收到數(shù)據(jù)后,讀線程檢查第一個字節(jié)是否為RSP_READ。若是,則保存收到數(shù)據(jù),然后再次發(fā)出CMD_READ命令。如此反復,直到512字節(jié)(32個塊)全部完成。
讀出線程與界面線程的通信也是通過向界面線程發(fā)消息來實現(xiàn)的。讀出線程可發(fā)如下的消息:WM__REA DOVER,WM_I2C_BLOCKFINISH,WM_ _COMMFAILED。其中后兩個消息的意義和寫線程所發(fā)的消息意義一樣,所做的工作也是一樣的。WM_ _READOVER提示界面線程讀出已經(jīng)完成,界面線程收到這條消息后,將在讀出開始時被禁用的讀出按鈕設為可用,清除進度條并在消息框里加入一條讀出完成的消息。
6 結束語
以上介紹了從PC向總線的EEPROM寫入數(shù)據(jù)的基本方法,它既可以經(jīng)擴充后自成一個系統(tǒng),比如文本閱讀器,也可以作為模塊用在其他系統(tǒng)中。對于總線時序的模擬代碼則可以當成通用程序使用。
參考文獻
[1] 李群芳. 單片微型計算機與接口技術(第2版). 北京:電子工業(yè)出版社,2005
[2] Jim Beveridge. Multithreading Applications in Win32 Pearson Education
評論