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)设置成非阻塞.详细修改就是另一回事了,包括波特率,校验位.