ARM LINUX 擴充串口__LINUX

來源:互聯網
上載者:User
ARM LINUX 擴充串口

分類: 嵌入式

----XR21V1414 USB轉串口

----16C554 匯流排擴充串口

不同的項目,有些項目經常需要轉串口。有兩種方式,一種用USB去擴,另一種用16C554 去擴。這兩種從本質上來說,是一樣的。成本上也不相上下。如果兩種方式在項目設計中都可以的話,建議採用匯流排的方式。因為擴充串口總是會出現一些問題,沒有原生串口好用。但匯流排方式相對來說問題更少,而USB擴串口,相信在PC機上就領略了它的脾氣。


一、XR21V1414 USB轉串口

USB 擴串口方案還是很多的。這裡以我用過的XR21V1414為例。首先去官網上下載一個核心對應的驅動,我是採用Linux 2.6.18-3.4.x這種相容模式的驅動。連結:

http://www.exar.com/common/content/default.aspx?id=10296

把驅動解壓到drivers/usb/serial/ 下面,然後修改相應的Makefile ,Kconifg 就行了。這樣就可以支援1410,1412,1414 ,分別是1路,2路,4路。如果usb 不夠用的話,可以採用GL850G usb hub 去擴充,然後再接XR21V1414。


點擊(此處)摺疊或開啟 Makefile :
obj-$(CONFIG_USB_SERIAL_EXAR_XR21V14XX) += vizzini.o
Kconfig :
config USB_SERIAL_EXAR_XR21V14XX
tristate "USB serial exar xr21v14XX 4 Port Serial Driver"
help
Say Y here if you want to use 4 port usb to serial adapter.


二、16C554
匯流排擴充串口

匯流排擴充串口,16C55 系列比較常用,也比較好用,核心支援得很好了。這是一個古老的驅動。st16c554是一款整合了4路標準非同步串列收發器的串口擴充晶片,它的操作方法和寄存器用法與8250完全相同,因此我們可以用linux內經典的8250驅動來驅動st16c554。


點擊(此處)摺疊或開啟 //定義好裝置檔案
#include <linux/serial_8250.h>

#define PORT(_base,_irq) \
{ //不是iobase,arm IO和MEMORY統一編址
.mapbase = (unsigned long)_base, \
.irq = _irq, \
.uartclk = 115200*16, \
.iotype = UPIO_MEM, \ // 表示8位讀寫
.flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP | UPF_AUTO_IRQ , \
.regshift = 1, \
}


.mapbase指的是16C554的物理基地址,注意不是membase,iobase;.uartclk是16C554晶振的頻率,其最高傳輸速率為.uartclk/16;.iotype指的是訪問類型,與硬體的串連相關,UPIO_MEM指的是8位匯流排串連,而UPIO_MEM32表示為32位匯流排訪問方式,即訪問16C554的寄存器時,讀取32位元,取低8位;.regshift也跟硬體的物理串連相關,指的是訪問16C554的每個地址時的位移,也就是16C554的A0對應CPU的A幾;


點擊(此處)摺疊或開啟 static struct plat_serial8250_port serial_8250_data[] = {
PORT(((unsigned long)(MX53_CS0_BASE_ADDR+((0x60000 + 0)<<1))), gpio_to_irq(CPUNAME_GPIO33)),
PORT(((unsigned long)(MX53_CS0_BASE_ADDR+((0x60000 + 8)<<1))), gpio_to_irq(CPUNAME_GPIO34)),
PORT(((unsigned long)(MX53_CS0_BASE_ADDR+((0x60000 + 16)<<1))), gpio_to_irq(CPUNAME_GPIO35)),
PORT(((unsigned long)(MX53_CS0_BASE_ADDR+((0x60000 + 24)<<1))), gpio_to_irq(CPUNAME_GPIO36)),

{},
};

static struct platform_device serial_device = {
.name = "serial8250",
.id = 0,
.dev = {
.platform_data = serial_8250_data,
},
};


//初始化裝置與GPIO 口
weim_cs_config(); //匯流排的初始化要在這之前完成

gpio_request(CPUNAME_GPIO34, "34");
gpio_direction_input(CPUNAME_GPIO34 );
gpio_request(CPUNAME_GPIO35, "35");
gpio_direction_input(CPUNAME_GPIO35 );
gpio_request(CPUNAME_GPIO36, "36");
gpio_direction_input(CPUNAME_GPIO36 );
gpio_request(CPUNAME_GPIO33, "33");
gpio_direction_input(CPUNAME_GPIO33 );
platform_device_register(&serial_device); //註冊裝置


//driver/serial/ 下8250.c

在device driver/char/serial/ 下面
核心config圖如下:



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.