客戶在開發時,經常需要英創工控主板和其他的一些設備通過串口進行通訊,針對不同的設備,連接的方法也有所不同,下面就來介紹一下具體的方法。
在工業控制領域中,常使用的RS232通訊串口分為三線制和五線制,三線制的串口顧名思義,使用了三根線通訊,分別為RX(接收),TX(輸出),GND。而五線制的串口就是常說的使用了RTS/CTS流控的串口,在三線制串口的基礎上加入了流控信號,所以它的信號分別為RX,TX,RTS,CTS,GND。英創工控主板和設備連接原理如下圖:
當設備使用的串口為三線制串口時,可以直接英創評估底板引出的串口連接,使用英創公司提供的測試例程就能正常通訊。當設備使用的是五線制串口時,因為英創工控主板中大部分都是三線制的串口,所以如果使用三線制的串口直接與設備連接進行通訊,設備的收不到流控的信號,就不能夠正常的收發數據。針對這種情況,英創公司給出了兩種解決的方案。
第一種方案
第一種方法是使用英創工控主板的COM2(ttyS1)口進行通訊,因為英創工控主板的COM2口是完整的九線制的串口,這一路串口自帶RTS/CTS流控信號,能夠直接與設備正常通信,只需要在程序中單獨控制RTS信號,將RTS信號置為有效,這樣就能滿足設備的通訊要求,正常進行數據的收發。但是COM2口使用的是TTL電平,所以如果需要與RS232電平的串口進行通訊,還需要一個擴展電路來實現電平轉換,這里英創公司給出一種擴展電路的方案,如下圖:
從圖中可以看出,因為英創工控主板的的TTL電平輸入輸出為3.3V,所以COM2口的信號先由3.3V和5V之間相互轉換,再從TTL電平轉換為RS232電平。
在軟件控制方面,根據上面所講的,需要控制英創工控主板的RTS信號,將信號置為有效,調用ioctl()函數即可以達到目的:
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);
第二種方案
第二種方案是針對普通三線制串口的,因為英創工控主板上大部分都是三線制串口,如果使用三線制串口,也是可以和使用五線制串口的設備通訊的,只是需要做一些處理。五線制串口不能和三線制串口通訊的原因是因為收不到對方發送來的RTS#信號,所以我們可以選用一路GPIO來作為RTS#信號,RTS#信號是低有效的,在通信的過程中,讓GPIO輸出低電平,這樣對于設備來說,就能收到英創主板發送來的RTS#信號,通訊就能夠正常進行了。和第一種方案相同,還是需要一個擴展電路來實現功能,下面英創公司給出一種擴展電路的方案,如圖:
如圖所示,將一路GPIO作為RTS#信號,這樣使用三線制的串口就能和設備進行正常的通訊了。
在通訊的過程中,需要控制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有效
最后設置好設備要求的波特率,停止位等配置參數,就能夠正常的與使用RTS/CTS流控的設備進行通訊了。
-
嵌入式主板
+關注
關注
7文章
6086瀏覽量
35544
發布評論請先 登錄
相關推薦
評論