Mini2440开发板串口连接

网上淘来一片二手的mini2440开发板,准备玩一玩。串口连接单板,是第一步,但却让我折腾了好一阵子。

首先是解决笔记本没有串口的问题,同样是淘宝,买来一个usb转串口转接头,PL2303系列芯片的,插上后windows10能够自动识别并安装匹配的驱动,但是打开开发板的电源,串口毫无输出。
想着是还是驱动程序有问题,找卖家下载推荐的驱动,并安装。但仍然是老样子。驱动包里有个芯片检测程序,运行检查,检测到芯片是PL 2303 TA,对照随驱动的驱动的user’s manual看了一下,确认可以支持windows8,想来windows10应该也没问题(有几种老的芯片,驱动只能支持到windows7)。题外话,手册里还特意提到了在中国市场上有很多山寨货,因质量问题容易导致驱动黄色叹号ErrorCode10,哎。

驱动没问题,串口无输出,怎么办呢?我想着,是不是因为东西是二手的,Nor flash里根本没东西呢?看起来也是有这个可能性啊。于是又找来flash烧写的软件Setup_JLinkARM_V450l.exe,安装后有两个主要程序,J-Link ARM和J-Flash ARM。前者主要是用来调试程序的,现在暂时用不到;后一个就是烧写flash的了。貌似,卖家发过来的JLink V8板子也是一个山寨货啊。J-Flash使用还是比较简单,加载工程文件(也是搜来的mini2440.jflash),准备好烧写boot(supervivi-128M.bin),Target菜单下面connect,Erase,Program就可以了。不得不说,网上关于mini2440的经验,指导,参考等等资源还是很丰富的。
这里写图片描述
烧好这个bootloader,正常的话,接上电源串口应该肯定有输出啊,但又一次失望了。还是什么都没有。

再上网搜索,有的说便宜的串口线兼容性不好,换一根串口线就好了。于是再上淘宝,这次搞了一根品牌的60大元的串口线,收到货后,接上去,然并卵,依然木有输出,这也太衰了吧!资料反复看了几遍,最后感觉是串口线线序的问题,usb转串口出来是9针公头,mini2440上也是9针公头,中间用的是和mini2440一起发过来的母-母串口连接线。越看越像是中间这根线的线序不匹配导致的。万用表因为长时间不用,9V电池没电用不了,干脆用笨的办法,用导线直接连吧,也方便测试线序不是。
这里写图片描述
当用上面图中的连接时(2440串口2针与连接线3针相连,2440串口3针与连接线2针相连,双方5针互连),串口终于有了久违的输出:

##### FriendlyARM BIOS 2.0 for 2440 #####
[x] format NAND FLASH for Linux
[v] Download vivi 
[k] Download linux kernel 
[y] Download root_yaffs image 
[a] Absolute User Application
[n] Download Nboot for WinCE 
[l] Download WinCE boot-logo
[w] Download WinCE NK.bin 
[d] Download & Run 
[z] Download zImage into RAM 
[g] Boot linux from RAM 
[f] Format the nand flash 
[b] Boot the system 
[s] Set the boot parameters 
[u] Backup NAND Flash to HOST through USB(upload) 
[r] Restore NAND Flash from HOST through USB 
[q] Goto shell of vivi 
[i] Version: 1026-2K
Enter your selection: 

太波折了,还多买了一根高端串口线(最后用的USB转串口是第一次那个便宜的),/(ㄒoㄒ)/~~

附:
这里写图片描述
公母头串口针脚编号和针脚定义见上图。要收发正常,一端的RX要接另一端的TX。至于什么交叉直连之类的概念,搞不清楚也无所谓,总之串口有输出了就说明ok的。

发布了36 篇原创文章 · 获赞 9 · 访问量 10万+
展开阅读全文

mini2440与pc串口通信问题

11-23

下面的代码用来接收pc发送的数据并且打印,大神能看看问题在哪里吗?用的USB转串口线连接的: 代码: /****************** Name:uart.c Author:xiaohu Date:2015/3/7 Descript:communicate by uart ********************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <errno.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <termios.h> //设置串口的速率、数据位、奇偶校验位、停止位 int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop) { struct termios newtio,oldtio; if ( tcgetattr( fd,&oldtio) != 0) { perror("SetupSerial 1"); return -1; } bzero( &newtio, sizeof( newtio ) ); newtio.c_cflag |= CLOCAL | CREAD; newtio.c_cflag &= ~CSIZE; switch( nBits ) { case 8: newtio.c_cflag |= CS8; break; } switch( nEvent ) { case 'O': //奇校验 newtio.c_cflag |= PARENB; newtio.c_cflag |= PARODD; newtio.c_iflag |= (INPCK | ISTRIP); break; case 'E': //偶校验 newtio.c_iflag |= (INPCK | ISTRIP); newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD; break; case 'N': //无校验 newtio.c_cflag &= ~PARENB; break; } switch( nSpeed ) { case 9600: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break; case 115200: cfsetispeed(&newtio, B115200); cfsetospeed(&newtio, B115200); break; default: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break; } if( nStop == 1 ) { newtio.c_cflag &= ~CSTOPB; } else if ( nStop == 2 ) { newtio.c_cflag |= CSTOPB; } newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 0; tcflush(fd,TCIFLUSH); if((tcsetattr(fd,TCSANOW,&newtio))!=0) { perror("com set error"); return -1; } printf("set done!\n"); return 0; } //根据串口文件描述符打开相应的串口端口 int open_port(int fd,int comport) { char *dev[]={"/dev/ttySAC0","/dev/ttySAC1","/dev/ttySAC2"}; long vdisable; if (comport==1) { fd = open( "/dev/ttySAC0", O_RDWR|O_NOCTTY|O_NDELAY); if (-1 == fd) { perror("Can't Open Serial Port0"); return(-1); } else { printf("open ttySAC0 .....\n"); } } else if(comport==2) { fd = open( "/dev/ttySAC1", O_RDWR|O_NOCTTY|O_NDELAY); if (-1 == fd) { perror("Can't Open Serial Port1"); return(-1); } else { printf("open ttySAC1 .....\n"); } } else if (comport==3) { fd = open( "/dev/ttySAC2", O_RDWR|O_NOCTTY|O_NDELAY); if (-1 == fd) { perror("Can't Open Serial Port2"); return(-1); } else { printf("open ttySAC2 .....\n"); } } if(fcntl(fd, F_SETFL, 0)<0) { printf("fcntl failed!\n"); } else { printf("fcntl=%d\n",fcntl(fd, F_SETFL,0)); } if(isatty(STDIN_FILENO)==0) { printf("standard input is not a terminal device\n"); } else { printf("isatty success!\n"); } printf("fd-open=%d\n",fd); return fd; } //写数据到相应串口 int write_to_com(int fd, const void *buf, int count) { int ret = -1; ret = write(fd,buf,count); if(ret == -1) { perror("write to com error"); } return ret; } //从相关串口读取数据 int read_from_com(int fd, void *buf, int count) { int ret = -1; ret = read(fd,buf,count); if(ret == -1) { perror("read from com error"); } return ret; } int main(void) { int com_fd,j=0; int i; char buff_read[64]; if((com_fd=open_port(com_fd,2))<0) //change where necessary! { perror("open_port error"); return; } if((i=set_opt(com_fd,4800,8,'N',2))<0) { perror("set_opt error"); return; } printf("fd=%d\n",com_fd); while(1) { memset(buff_read,0,sizeof(buff_read)); i=read_from_com(com_fd,buff_read,64); sleep(1); printf("%s",buff_read); // printf("i:%d\n",i); } return 0; } ![![![图片说明](https://img-ask.csdn.net/upload/201511/23/1448268221_450379.jpg)图片说明](https://img-ask.csdn.net/upload/201511/23/1448268311_3930.jpg)图片说明](https://img-ask.csdn.net/upload/201511/23/1448268301_879195.jpg) 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览