RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。RS232传输的距离在15米以下,RS485传输距离是几十米到1000米以上。
嵌入式系统上一般使用串口转485,本文以如下原理图为例,讲解RS485总线驱动。
485驱动=串口驱动+GPIO的字符驱动,串口驱动一般都用系统提供的,不需要自己写,需要自己写的只有GPIO字符驱动,并在应用程序中调用GPIO字符驱动及串口驱动。
BUF_XURTS1高电平发送,低电平接收。当然,由于主板采用3.3V供电,核心板采用1.8V供电,是需要经过一颗电平转换芯片的。
主板BUF_XuRXD1信号(经过电平转换芯片→)主板XuRXD1信号(板对板连接器→)核心板处理器GPA0_4;
主板BUF_XuTXD1信号(经过电平转换芯片→)主板XuTXD1信号(板对板连接器→)核心板处理器GPA0_5;
主板BUF_XURTS1信号(经过电平转换芯片→)主板XURTS1信号(板对板连接器→)核心板处理器GPA0_7;
GPIO字符驱动如下:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <mach/gpio.h>
#include <plat/gpio-cfg.h>
#include <linux/miscdevice.h>
#include <linux/platform_device.h>
//#include <mach/gpio-bank.h>
#include <mach/regs-gpio.h>
#include <asm/io.h>
#include <linux/regulator/consumer.h> //cwp, PMIC interafce
//#include "gps.h"
#include <linux/delay.h>
#define GPS_DEBUG
#ifdef GPS_DEBUG
#define DPRINTK(x...) printk("MAX485_CTL DEBUG:" x)
#else
#define DPRINTK(x...)
#endif
#define DRIVER_NAME "max485_ctl"
int max485_ctl_open(struct inode *inode,struct file *filp)
{
DPRINTK("Device Opened Success!\n");
return nonseekable_open(inode,filp);
}
int max485_ctl_release(struct inode *inode,struct file *filp)
{
DPRINTK("Device Closed Success!\n");
return 0;
}
int max485_ctl_pm(bool enable)
{
int ret = 0;
printk("firecxx debug: GPS PM return %d\r\n" , ret);
return