一種UART&SPI接口驗證工具的設計與實(shí)現

3.1 配置程序
配置程序主要由測試用例管理和配置接口層兩部分組成,主要完成測試用例管理及測試用例的生成。
3.1.1 測試用例管理
測試用例管理部分主要完成測試用例的分發(fā)、定位以及測試結果的收集。為了兼容各個(gè)Linux版本,測試用例管理部分不采用界面的形式進(jìn)行管理,而是采用命令行的形式運行。用例管理部分可以選擇單個(gè)或多個(gè)測試用例進(jìn)行測試。例如:uart_test case1 case2是對第一、二個(gè)測試用例進(jìn)行測試,uart_test all是對所有的測試用例進(jìn)行測試。測試用例管理部分會(huì )根據測試用例ID自動(dòng)定位到相應的程序執行。圖5是測試用例管理部分的流程圖。
3.1.2 測試用例的生成
以UART接口為例,描述一個(gè)完整的測試用例。圖6描述的是一個(gè)UART接口的完整的測試用例。從途中可以清晰地看出配置程序是如何協(xié)調上位機與下位機之間的通信的。

本文提出的驗證工具與以往的驗證工具最大的區別在于配置程序可以協(xié)調上位機與下位機。上位機與下位機并不是完全分離的,而是由配置程序統一協(xié)調,分別給上位機和下位機下發(fā)命令修改參數及通信。
3.1.3 兼容性的實(shí)現
由于對SPI接口來(lái)說(shuō),要求兼容PC機和多個(gè)嵌入式平臺,所以在程序的設計上要考慮兼容性的問(wèn)題。
兼容性問(wèn)題需要考慮兩個(gè)方面:
(1)數據類(lèi)型的重定義。
(2)采用分層設計的思想。
3.2 驅動(dòng)程序
驅動(dòng)程序主要包括驅動(dòng)接口層和硬件接口層。其中驅動(dòng)接口層主要完成將配置程序的命令或數據進(jìn)行解析,通過(guò)接口發(fā)送出去,而硬件接口層主要負責驅動(dòng)與硬件(固件)接口操作,負責對DUT設備進(jìn)行設置,對待測設備進(jìn)行寫(xiě)命令/數據,或從DUT設備獲取狀態(tài)/數據信息。
3.2.1 UART接口驅動(dòng)開(kāi)發(fā)
UART協(xié)議比較簡(jiǎn)單,本文不對UART協(xié)議進(jìn)行介紹。由于在LINUX系統下,對串口有相當好的支持。Linux下把串口看作一個(gè)文件來(lái)處理,故對串口的讀寫(xiě)操作相當于對文件直接進(jìn)行讀寫(xiě)操作。這樣我們可以直接調用系統函數如open,write,read,close等對串口進(jìn)行操作。
需要注意的是,對串口的寫(xiě)操作比較容易,但是讀操作存在著(zhù)阻塞I/O的問(wèn)題。在對串口進(jìn)行讀取操作的時(shí)候,如果使用的是RAW模式,每個(gè)read系統調用將返回當前串行輸入緩沖區中存在的字節數。如果沒(méi)有數據,將會(huì )一直阻塞到有字符到達或者間隔時(shí)鐘到期,或者發(fā)生錯誤此時(shí)可采用異步讀取。所謂異步讀取,指的是先查詢(xún)串口,看串口是否可用,直到串口可用了再去讀就可以避免阻塞I/O的問(wèn)題。
3.2.2 SPI接口驅動(dòng)開(kāi)發(fā)
(1)SPI概述
SPI的通信原理很簡(jiǎn)單,它以主從方式工作,這種模式通常有一個(gè)主設備和一個(gè)或多個(gè)從設備,需要至少4根線(xiàn),事實(shí)上3根也可以(單向傳輸時(shí)或者硬件復用兩根數據線(xiàn)),也是所有基于SPI的設備共有的,它們是MISO,MOSI,SCK,CS。
MOSI為主設備數據輸出,從設備數據輸入;MISO為主設備數據輸入,從設備數據輸出;SCK為時(shí)鐘信號,由主設備產(chǎn)生;CS為從設備使能信號,由主設備控制。
(2)SPI驅動(dòng)開(kāi)發(fā)
在Linux下開(kāi)發(fā)SPI驅動(dòng)有兩種方式,一種是采用Linux自帶的SPI子系統,一種是采用字符設備驅動(dòng)的形式。本文采用了字符設備驅動(dòng)的形式。在Linux 2.6內核中使用cdev結構體描述字符設備。cdev結構體如下所示。字符設備的主要工作是初始化、添加和刪除cdev的結構體,申請和釋放設備號,以及填充file_operations結構體的操作函數,實(shí)現file_operations結構體中的read(),write()和ioctl()等。

cdev結構體的dev_t成員定義了設備號,另一個(gè)重要成員file_operations定義了字符設備驅動(dòng)提供給虛擬文件系統的接口函數。file_ operations結構體中的成員函數是字符設備驅動(dòng)程序設計的主體內容,這些函數實(shí)際會(huì )在應用程序進(jìn)行Linux的open(),write(),read(),close()等系統調用時(shí)最終被調用。
Linux字符設備驅動(dòng)主要由以下幾部分組成:
(1)字符設備驅動(dòng)模塊加載與卸載函數
在字符設備驅動(dòng)模塊加載函數中應該實(shí)現設備號的申請和cdev的注冊,對應的是insmod過(guò)程,而在卸載函數中應實(shí)現設備號的釋放和cdev的注銷(xiāo),對應的是rmmod過(guò)程。
(2)字符設備驅動(dòng)的file_operations結構體中成員函數
file_operations結構體中成員函數是字符設備驅動(dòng)與內核的接口,是用戶(hù)空間對Linux進(jìn)行系統調用最終的落實(shí)者。
(3)加載字符設備驅動(dòng)之后,在用戶(hù)空間建立一個(gè)設備節點(diǎn),在用戶(hù)空間就可以對設備進(jìn)行操作了,操作方式操作文件的方式相同。
3.2.3 驅動(dòng)與固件的接口
驅動(dòng)與固件之間的交互是通過(guò)自定義的“AT+”協(xié)議,協(xié)議交互流程見(jiàn)圖7。

AT+命令主要包括3個(gè):“AT+”:判斷串口鏈路是否正常。如果正常,返回OK;不正常,返回error;“AT+set”:接口參數設置命令。如果參數設置完成,返回OK;不正常,返回error;“AT+send”:數據發(fā)送命令。如果數據發(fā)送/接收正確,返回OK;否則,返回error。
4 結語(yǔ)
本文介紹的工具適用于UART接口和SPI接口的功能、性能和兼容性測試,可實(shí)現測試的自動(dòng)化。
評論