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.baidu.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<stdio.h>#include<string.h>
#include<malloc.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<termios.h>
#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[]={"12345678901234567890123456789012345678901234567890\n"};/*固定
发送的数据*/
charsbufrec[256]={0};
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;
}