• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于RS485的PC與ARM之間文件傳輸的實現

    基于RS485的PC與ARM之間文件傳輸的實現

    作者: 時間:2016-12-19 來源:網絡 收藏

      1. 引言

    本文引用地址:http://www.czjhyjcfj.com/article/201612/341758.htm

      在產業控制場合中,常會要求通過PC向嵌進式微機傳輸圖片文件、數據文件等。由于價格便宜、操縱簡單、使用者可以隨意編寫應用協議等優點,被廣泛應用在中等長間隔的控制通訊中。因此,利用實現PC到嵌進式系統的文件傳輸,十分具有現實意義。

      本文以基于9的三星S3C2410A為嵌進式微處理器,嵌進式Linux為嵌進式操縱系統搭建一個嵌進式系統,成功實現了PC通過向嵌進式系統傳輸文件。

      2. RS485接口先容

      RS485是一種多點、雙向、平衡傳輸規范,被命名為TIA/EIA-485-A標準。

      RS485由RS232發展而來,它改進了RS232通訊間隔短、速率低的缺點。RS485是一種平衡通訊接口,傳輸速率最高可達10Mbit/s,最大傳輸間隔約為1219m,并答應在一條平衡總線上連接最多32個設備。RS485的共模輸出電壓是-7V~+12V[5]。

      3. 硬件設計

      本文采用Friendly公司的Nano2410V2核心板作為中心處理器模塊,并配以外圍電路。Nano2410V2核心板以S3C2410A為CPU[1]。

      把S3C2410A的UART0分配給RS485總線,由芯片MAX485完成TTL到差分信號的轉換,RS485方向控制線占用GPB2,如圖1所示[2]。

        

     

      圖1 硬件連線圖

      PC上使用RS232/RS485轉換器,完成RS232到RS485的轉換。

      4. RS485驅動程序

      RS485標準只對接口的電氣特性作出規定,而不涉及插件、電纜或協議[5]。因此,在Linux下使用RS485接口,可借助串口驅動程序實現。但是,RS485是半雙工的,比起RS232,需要多加一個I/O口來控制RS485的方向,該I/O口在發送數據時置高,接收數據時置低。

      發送數據:

      ioctl(fd485, 1, 0); //fd485:方向控制I/O口驅動設備文件的fd

      write(fdtty, &bufout, 1); //fdtty:串口驅動設備文件的fd

      delay();

      讀取數據:

      ioctl(fd485, 0, 0);

      read(fdtty, &bufin, 1) ;

      方向控制線的驅動程序設計:

      定義file_operatiONs[3][4]:

      static struct file_operations io485_fops=

      {

      owner:THIS_MODULE,

      ioctl:io485_ioctl

      };

      函數io485_ioctl用于設置RS485接口的方向:cmd為0時,設為輸進;cmd為1時,設為輸出[3][4]。

      static int io485_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)

      {

      switch(cmd)

      {

      case 0:

      case 1:

      write_gpio_bit(GPIO_B2, cmd);

      return 0;

      default:

      return -EINVAL;

      }

      }

      5. 自定義數據幀格式

      在這里數據幀格式指的是發送方發送一個文件或者接收方接收一個文件的完整過程所需要的每一個字節元素的含義[5]。

      本文定義格式如下:

      (1) 開始符:標志開始傳輸文件,1個字節。

      (2) 文件名長度:所傳輸文件的文件名的長度,1個字節。

      (3) 文件名:所傳輸文件的文件名,字節數由文件名長度決定。

      (4) 文件大?。核鶄鬏斘募拇笮?,4個字節。

      (5) 文件內容:所傳輸文件的數據,字節數由文件大小決定。

      (6) ACK:確認信號。接收方給發送方的反饋信號,表示數據接收完成,1個字節。

      6. 程序流程

      本文對于傳輸文件,采用的方法為:發送端打開要傳輸的文件,讀取文件數據,然后通過串口向外發送;接收端先建立一個空文件,然后把從RS485接口讀到的內容寫進該文件里。

      數據校驗:為防止文件數據在傳輸的過程中,丟失或出錯,進行校驗是必要的。在這里,采用的校驗方法是:發送端每發送n個字節,就取1個字節作為校驗字節。該字節是前n個字節異或運算的結果;接收端每接收n個字節,就對該n個字節進行異或運算,并把結果與校驗字節作比較,相同則傳輸繼續進行,不同則要求發送端重新發送。

      在本文中,作為文件接收方,PC作為文件發送方,接收方程序流程圖如圖5所示,發送方的程序流程與接收方互補即可。

        

     

      圖2 程序流程圖

      7. 結語

      通過PC向嵌進式微機傳輸文件在嵌進式系統應用中經常需要。而RS485由于其突出優點,廣泛應用在產業控制中。因此通過RS485實現PC到嵌進式系統的文件傳輸,十分具有現實意義。

      本文作者創新點:提出了一種簡單的RS485驅動程序設計方法,并以一種簡單、實用、可靠的方法成功實現了PC通過RS485向ARM傳輸文件。



    關鍵詞: RS485 ARM

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 夏邑县| 云南省| 孟连| 栖霞市| 江门市| 镇沅| 突泉县| 兴安县| 花莲市| 舞钢市| 弋阳县| 东兴市| 平顶山市| 龙陵县| 德钦县| 定兴县| 老河口市| 呼伦贝尔市| 江津市| 泾阳县| 灵璧县| 镇原县| 北安市| 绥芬河市| 安徽省| 巨鹿县| 新绛县| 南通市| 古浪县| 当雄县| 通山县| 方城县| 景谷| 甘孜县| 正宁县| 桐城市| 新营市| 特克斯县| 景德镇市| 龙游县| 重庆市|