6个串口,说多不是很多,说少也不是很少,就目前来说,本身iMX283支持的6个串口中,一个用于调试,已经焊接在底板上,还有另外5个,排序分辨是UART0,UART1,UART2,UART3,UART4.其中UART2,UART3和SPI复用,其他三个专业用于UART.专用的UART0,UART1又可以变成485串口.看内核配置,选项都已经全部打开[查找:CONFIG_MXS_AUART0_DEVICE_ENABLE]:
如果要开启UART0,UART1流控,需要去掉注释[arch/arm/mach-mx28/mx28evk_pins.c]:
{ .name = "RS485_DIR", .id = PINID_LCD_D17, .fun = PIN_GPIO, .strength = PAD_8MA, .voltage = PAD_3_3V, .drive = 1, }, { .name = "RS485_DIR", .id = PINID_LCD_D18, .fun = PIN_GPIO, .strength = PAD_8MA, .voltage = PAD_3_3V, .drive = 1, },
当然只是使能外设,要用就要到arch/arm/mach-mx28/mx28_pins.h修改,原文:
{ .name = "AUART4.RX", .id = PINID_SAIF0_BITCLK, .fun = PIN_FUN3, }, { .name = "AUART4.TX", .id = PINID_SAIF0_SDATA0, .fun = PIN_FUN3, },
把PIN_FUN3改成PIN_FUN2就可以了,SPI也同理修改.然后/dev/ttySP*是设备文件节点,但是,设备文件节点又不能直接使用的,需要IOCTL.首先打开设备.C语言代码如下:
int fd; fd = open("/dev/ttySP0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd < 0) { printf("open device error "); }
的输出用write,读取用read,关闭设备用close,默认是阻塞方式,用
fcntl(fd, F_SETFL, FNDELAY)设置成非阻塞.详细修改就是另一回事了,包括波特率,校验位.