QT251產品規格書
一、產品概述
QT251N是一款基于精簡指令集(RISC)架構高性能的32位MPU的嵌入式計算機。該CPU是以ARMCortex-A8為核心的系統級單芯片,內置NEON單指令流多數流(SIMD)協處理,帶有錯誤校正碼(ECC)的256KBL2緩存,支持1GHz的頻率。系統提供RS458/RS232通訊,有線網絡通訊,CAN總線,同時也提供可選的無線GPRS通訊,具有體積小、功耗低、效率高等特點,適用于電力集中器、HMI、工業控制、網關等場合。
二、產品特性
1.硬件特性
AM355xCPU:
32bitARMCorte-A8架構,主頻800MHz,1.6MIPS/MHz,主頻1GHz
32KBI-cache,32KBD-cache,NeonSIMD協處理器
內存:
512MbyteDDR3、64KB專用RAM
FLASH:
512MbyteNANDFlash,支持8Gbyte
支持NAND、NOR、SRAM等FLASH
加密:
支持PRNG/DES/3DES/AES/SHA/HMAC加密,256位加密模式
看門狗:
內置WDT,溢出時間小于60秒,支持空閑喚醒和掉電喚醒
RTC:
高精度實時時鐘,內置供電電池
調試口:
1路串口為系統console口。波特率:115200,數據位:8,停止位:1,校驗位:none,流控:無
RS485/RS232:
8路獨立RS485通訊,內部全隔離保護設計
8路RS485/RS232分時復用通訊,可根據實際選擇使用,內部全隔離保護設計
B碼對時:
1路RS485接收,專用于B碼對時,連接后自動對時
CAN:
1路CAN通訊,內置隔離保護設計
開關量輸出輸入:
2路雙刀雙擲繼電器輸出
2路開關量輸入
網絡:
4路10M/100M自適應工業以太網,標準RJ45接口
15KVTVS保護,內部全隔離保護設計
無線功能(可選):
射頻波段800/900/1800/1900MHz(可選2/3/4G)
可選WIFI:可連接AP,也可做AP
1個SIM卡接口,1個天線接口
傳輸速度:達到相應功能的標準速度
SDCARD:
內置一個SD/MMC卡接口
電源:
輸入電壓:220V,支持交流、直流
單機功耗:<12W
機械特性
外殼金屬材質
尺寸:1U
防護等級:IP63
工作環境
工作溫度:-40℃~+85℃
工作濕度:5%~95%
2.軟件特性
2.1系統特性
QT251N預裝基于TIAM335x的Linux操作系統,版本為3.2.0。滿足POSIX標準或類UNIX平臺的應用程序。針對系統*的硬件設備,內核提供了簡單、易用的驅動接口,可加速用戶的應用程序開發。
QT251N系統的軟件系統共分為3部分,分別為Bootloader、linux內核和
rootfs。Bootloader是遵循GPL條款的開放源碼項目,UBoot主要是引導內核的啟動,支持NFS掛載、NANDFlash啟動;linux內核是整個操作系統的層,負責整個硬件的驅動,以及提供各種系統所需的核心功能;rootfs是用于明確磁盤或分區上的文件的方法和數據結構,即在磁盤上組織文件的方法。
2.2環境配置
本公司提供的虛擬機系統ubuntu10.04,可直接編譯使用。用戶名:work
密碼:123456
編譯命令:arm-linux-gnueabihf-gcc-ofilenamefilename.c
編譯鏈:本公司提供的arm-linux-gnueabihf-4.7.tar.gz
非本公司提供的編譯環境下,把編譯鏈拷貝到PC的LINUX系統下,解壓編譯鏈后,把根目錄下的bin目錄添加到系統的環境變量即可。
如解壓到/opt/arm-linux-gnu目錄下,則添加環境變量為:
exportPATH=$PATH:/opt/arm-linux-gnu/bin
編譯鏈下載地址:
https://pan..com/s/1nv19D1Z#list/path=%2FWORK%2FCortex-A8
2.3管理機登錄
IP:eth0:192.168.1.177eth1:192.168.2.177eth2:192.168.3.177eth3:192.168.4.177
用戶名:root密碼:root
三、接口定義
1.電源接口
2.RS485接口
注:RS485第9~16通道與RS232的第9~16通道為復用通道。
3.RS232、CAN接口
注:RS232第9~16通道與RS485的第9~16通道為復用通道。對應的驅動接口相同,為分時復用通道。
4.開關量輸出輸入
注:繼電器輸出為雙刀雙擲開關,如下圖:
5.網絡接口
6.調試接口
調試口配置:波特率:115200,數據位:8,停止位:1,校驗位:none,流控:無
7.RS485/RS232驅動接口
驅動接口可以在管理機的/dev目錄下查看。
四、驅動實例
在系統的/program目錄下有相應的腳本文件,可以進行一些簡單的測試。其中要確保startup.sh文件里,端口映射的正確的。文件內容見附錄。
附錄:
1、startup.sh文件內容:
#!/bin/sh
ln-sf/dev/ttyCH0/dev/ttyS1
ln-sf/dev/ttyCH1/dev/ttyS2
ln-sf/dev/ttyCH2/dev/ttyS3
ln-sf/dev/ttyCH3/dev/ttyS4
ln-sf/dev/ttyCH4/dev/ttyS5
ln-sf/dev/ttyCH5/dev/ttyS6
ln-sf/dev/ttyCH6/dev/ttyS7
ln-sf/dev/ttyCH7/dev/ttyS8
ln-sf/dev/ttyCH8/dev/ttyS9
ln-sf/dev/ttyCH9/dev/ttyS10
ln-sf/dev/ttyCH10/dev/ttyS11
ln-sf/dev/ttyCH11/dev/ttyS12
ln-sf/dev/ttyCH12/dev/ttyS13
ln-sf/dev/ttyCH13/dev/ttyS14
ln-sf/dev/ttyCH14/dev/ttyS15
ln-sf/dev/ttyCH15/dev/ttyS16
ln-sf/dev/ttyO1/dev/ttyS17
iplinksetcan0typecanbitrate100000
ifconfigcan0up
2、serial.c文件內容:
#Include#Include
#Include
#Include
#Include
#Include
#Include
#Include
#definemax_buffer_size100/*buffersize*/
/*******************************************/intfd1;
intflag_close;
intopen_serial(intk,int*fd)
{
intsfd=-1;charstr[100];
sprintf(str,"/dev/ttyS%d",k);printf("open%s/n",str);
sfd=open(str,O_RDWR|O_NOCTTY|O_NONBLOCK);if(sfd==-1){
perror(str);return-1;
}
else{
*fd=sfd;return0;
}
}
/********************************************************************/intmain(intargc,char*argv[])
{
time_ttNow,tOld;intport;
char
sbuf[]=;/*固定
發送的數據*/
charsbufrec[256]=;
intsfd,retv,i,ncount=0,mcount=0;structtermiosopt;
intlength=sizeof(sbuf);
/*****************************************************************
**/
if(argc<2)
{
printf("inputerro:serial<1~4>/n");return0;
}
**/
/
**/
port=atoi(argv[1]);open_serial(port,&fd1);
/*****************************************************************
printf("readyforsendingdata.../n");tcgetattr(fd1,&opt);cfmakeraw(&opt);
/*****************************************************************
cfsetispeed(&opt,B9600);/*設置波特率為9600bps*/cfsetospeed(&opt,B9600);
/*****************************************************************tcsetattr(fd1,TCSANOW,&opt);
while(mcount<5)
{
retv=write(fd1,sbuf,length);/*發送數據*/if(retv==-1){
//perror("write");printf("writeerror/n");
}
else{
printf("thenumberofcharsentis%d/n",retv);
}
ncount=0;
printf("readyforreceivingdata.../n");
time(&tOld);tNow=tOld;ncount=0;
while(((tNow-tOld)<2))/*設置接收超時*/
{
time(&tNow);retv=read(fd2,&sbufrec[0],1);if(retv==-1){
//perror("read");
//printf("errorread/n");
//printf("tOld=%d;tNow=%d/n",tOld,tNow);
}
else{
printf("%02x",sbufrec[0]);ncount+=1;
}
}
mcount+=1;printf("/n");
}
flag_close=close(fd1);
if(flag_close==-1)/*關閉口端口*/printf("ClosetheDevice1failur!/n");
return0;
}