客戶在開發(fā)時,經(jīng)常需要英創(chuàng)工控主板和其他的一些設(shè)備通過串口進(jìn)行通訊,針對不同的設(shè)備,連接的方法也有所不同,下面就來介紹一下具體的方法。
在工業(yè)控制領(lǐng)域中,常使用的RS232通訊串口分為三線制和五線制,三線制的串口顧名思義,使用了三根線通訊,分別為RX(接收),TX(輸出),GND。而五線制的串口就是常說的使用了RTS/CTS流控的串口,在三線制串口的基礎(chǔ)上加入了流控信號,所以它的信號分別為RX,TX,RTS,CTS,GND。英創(chuàng)工控主板和設(shè)備連接原理如下圖:
當(dāng)設(shè)備使用的串口為三線制串口時,可以直接英創(chuàng)評估底板引出的串口連接,使用英創(chuàng)公司提供的測試?yán)叹湍苷Mㄓ崱.?dāng)設(shè)備使用的是五線制串口時,因?yàn)橛?chuàng)工控主板中大部分都是三線制的串口,所以如果使用三線制的串口直接與設(shè)備連接進(jìn)行通訊,設(shè)備的收不到流控的信號,就不能夠正常的收發(fā)數(shù)據(jù)。針對這種情況,英創(chuàng)公司給出了兩種解決的方案。
第一種方案
第一種方法是使用英創(chuàng)工控主板的COM2(ttyS1)口進(jìn)行通訊,因?yàn)橛?chuàng)工控主板的COM2口是完整的九線制的串口,這一路串口自帶RTS/CTS流控信號,能夠直接與設(shè)備正常通信,只需要在程序中單獨(dú)控制RTS信號,將RTS信號置為有效,這樣就能滿足設(shè)備的通訊要求,正常進(jìn)行數(shù)據(jù)的收發(fā)。但是COM2口使用的是TTL電平,所以如果需要與RS232電平的串口進(jìn)行通訊,還需要一個擴(kuò)展電路來實(shí)現(xiàn)電平轉(zhuǎn)換,這里英創(chuàng)公司給出一種擴(kuò)展電路的方案,如下圖:
從圖中可以看出,因?yàn)橛?chuàng)工控主板的的TTL電平輸入輸出為3.3V,所以COM2口的信號先由3.3V和5V之間相互轉(zhuǎn)換,再從TTL電平轉(zhuǎn)換為RS232電平。
在軟件控制方面,根據(jù)上面所講的,需要控制英創(chuàng)工控主板的RTS信號,將信號置為有效,調(diào)用ioctl()函數(shù)即可以達(dá)到目的:
i=ioctl(m_fd, TIOCMGET, &status);
if(i<0)
{
printf('wrong!!\n');
}
printf('i-%d\n',i);
status |= TIOCM_RTS; //將RTS信號置為有效
ioctl(m_fd, TIOCMSET, &status);
第二種方案
第二種方案是針對普通三線制串口的,因?yàn)橛?chuàng)工控主板上大部分都是三線制串口,如果使用三線制串口,也是可以和使用五線制串口的設(shè)備通訊的,只是需要做一些處理。五線制串口不能和三線制串口通訊的原因是因?yàn)槭詹坏綄Ψ桨l(fā)送來的RTS#信號,所以我們可以選用一路GPIO來作為RTS#信號,RTS#信號是低有效的,在通信的過程中,讓GPIO輸出低電平,這樣對于設(shè)備來說,就能收到英創(chuàng)主板發(fā)送來的RTS#信號,通訊就能夠正常進(jìn)行了。和第一種方案相同,還是需要一個擴(kuò)展電路來實(shí)現(xiàn)功能,下面英創(chuàng)公司給出一種擴(kuò)展電路的方案,如圖:
如圖所示,將一路GPIO作為RTS#信號,這樣使用三線制的串口就能和設(shè)備進(jìn)行正常的通訊了。
在通訊的過程中,需要控制GPIO,使能GPIO輸出低電平即可:
fd = open( '/dev/em9280_gpio', O_RDWR );
if( fd < 0 )
{
printf( 'Can not open /dev/em9280_gpio, fd=%d\n', fd );
return -1;
}
GPIO_OutEnable( fd, GPIO1);
GPIO_OutClear(fd, GPIO1); //等效使RTS有效
最后設(shè)置好設(shè)備要求的波特率,停止位等配置參數(shù),就能夠正常的與使用RTS/CTS流控的設(shè)備進(jìn)行通訊了。
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6085瀏覽量
35297
發(fā)布評論請先 登錄
相關(guān)推薦
評論