通用接口协议(串口,iic,spi,can,TCP/IP协议)


 UART

UART通信方式:异步串行全双工通信方式

异步通信:有通信速度要求。

UART通信速度由两个设备自己决定。

UART通信有一个数据格式。

 

UART通信四要素:波特率、数据位长度、校验位、停止位。

芯片通信过程中将这四个要素配好,完成了一大半功能。

备注:自己用过的开发版:STM32F407VG

IIC协议:

iic有两根线:一根时钟线,一个数据线。

iic有一个起始信号:时钟线拉高,数据从高电平到低电平,形成iic的起始信号

iic是如何发送数据的:起始信号+设备地址+数据+结束信号

 

7.1 字节格式
发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟
一个响应位 首先传输的是数据的最高位 MSB 见图 6 
 
如果从机要完成一些其他功能后 例如一个
内部中断服务程序 才能接收或发送下一个完整的数据字节 可以使时钟线 SCL 保持低电平迫使主机进入
等待状态 当从机准备好接收下一个数据字节并释放时钟线 SCL 后 数据传输继续
7.2 响应

 

数据线低电平时产生应答,可继续发送,不然应为高电平,主机产生结束条件

 

 

 

 

 

项目中的iic:HDC2010、DAC5574

HDC2010:它是一个测量环境温湿度的一个芯片(IC),湿度和温度数字传感器

8位的一个寄存器

使用过程如下:

 使用iic进行寄存器的初始化:复位、关闭中断、启动测量寄存器

//等待测量完成

//去读取温湿度寄存器的数据。 

 

void HDC2010Init(void)
{
    HDC2010WriteReg(HDC2010_RESET_DRDY_INT_CONF,SOFT_RES_NORMAL|ODR_1_120HZ|HEAT_EN_OFF|DRDY_OR_INT_EN_HIGH_Z);
    //正常复位、1/120输出速度、DRDY/INT_EN 引脚输出为高阻,不中断
    HDC2010WriteReg(HDC2010_INTERRUPT_MASK,DRDY_MASK_DISABLE|TH_MASK_DISABLE|TL_MASK_DISABLE|HH_MASK_DISABLE|HL_MASK_DISABLE);
    //中断掩码寄存器设置,所有中断关
    
    HDC2010WriteReg(HDC2010_MEASUREMENT_CONF,TEM_RES_14BIT|HUM_RES_14BIT|MEAS_CONF_TEM_HUM|MEAS_TRIG_START);
    //测量寄存器设置,温度14bit,温湿度均使用、并且启动测量
    
    
}

 

 

void HDC2010Read(void)
{
	unsigned short temperture=0;
	unsigned short humidity=0;
	float temperture_temp=0; 	
	float humidity_temp=0; 
	while(HDC2010ReadReg(HDC2010_INTERRUPT_DRDY)&DRDY_START_READAY!=DRDY_START_READAY);
	//等待测量完成
	temperture=HDC2010ReadRegU16(HDC201_TEMPERATURE_LOW);
	humidity=HDC2010ReadRegU16(HDC201_HUMIDITY_LOW);
	//printf("temperture=%d\n",temperture);
	//printf("humidity=%d\n",humidity);
	temperture_temp=(float)(((float)temperture)*165/65536) - 40;
	humidity_temp=(float)(((float)humidity)*165/65536);
	if(temperture_temp<0)
	printf("00");
	else
	printf("%.2d",(int)temperture_temp);
	//printf("%d\n",(int)humidity_temp);
}

DAC5574

是一个模拟电压输出的芯片。作用是,作为lsu(激光扫描单元)的参考电压

原理图:在产品的作用:作为lsu(激光扫描单元)的参考电压

//通过iic往DAC写数据,测模拟电压
//有四路,一路一路的写,关掉就写0
unsigned char Write_DAC(unsigned char wdata,unsigned char ctl)
{
	if(!Start()){
		Stop();
		return 10;//FAILURE
		}
	SendByte(0x98);
	if(!WaitAck()){
		Stop();
		return 20;//FAILURE
		}
	SendByte(ctl);
	if(!WaitAck()){
		Stop();
		return 21;//FAILURE
		}
	SendByte(wdata);
	if(!WaitAck()){
		Stop();
		return 22;//FAILURE
		}
	SendByte(0);
	if(!WaitAck()){
		Stop();
		return 23;//FAILURE
		}
	Stop();
	return 1;
}

  

SPI通信协议(SPI总线)学习

SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一
种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

 支持全双工通信

通信简单
数据传输速率块
没有指定的流控制,没有应答机制确认是否接收到数据,

所以跟IIC总线协议比较在数据可靠性上有一定的缺陷

它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。

2):需要说明的是,我们SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配
置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下。

所以有效状态就是SCLK处于高电平时

所以有效状态就是SCLK处于低电平时

表示数据采样是在第1个边沿,数据发送在第2个边沿

表示数据采样是在第2个边沿,数据发送在第1个边沿

 

需要注意的是:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信
那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的
SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是
保持高电平要么是保持低电平。

 项目中的spi:ht82v38

 是一个16比特的 模拟前端处理器

16-Bit CCD/CIS Analog Signal Processor

 

 

void WriteADC(int addr,int data)
{
	int i;
	addr = addr<<12;
	data = data + addr;
	//data = 0;
	SLOAD_L;
	for(i=0;i<16;i++){
		if(data&0x8000){
			SDATA_H;
		}
		else{
			SDATA_L;
		}
		data = data <<1;
		udelay(4);
		SCLK_H;		
		udelay(4);
		SCLK_L; 	
		}
	SLOAD_H;	
}

int ReadADC(int addr)
{
	int i ,data;
	addr = addr<<12;
	addr = addr + 0x8000;
	data = 0;
	SLOAD_L;
	for(i=0;i<7;i++){
		if(addr & 0x8000){			
		SDATA_H;		
		}
		else{
		SDATA_L;		
		}
		addr = addr <<1;
		udelay(2);
		SCLK_H;		
		udelay(2);
		SCLK_L;
	}
	for(i=7;i<16;i++){			
		data = data <<1;	
		udelay(2);
		if(GPIO_MFP_1_read(10)){
		data = data + 1;		
		}
		SCLK_H;		
		udelay(2);
		SCLK_L;
	}		
	SLOAD_H;
	return data;
}	

  以前做的项目补充。

CAN协议:

现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。

 CAN-bus 主要特性 

1) 多主控制。
 在总线空闲时,所有的单元都可以开始发送消息(多主控制)。
 最先访问总线的单元可获得发送权。
 多个单元同时发送时,发送高优先级 ID 消息的单元可获得发送权。

2) 消息的发送

在 CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以
开始发送新的消息。两个以上的单元同时发送消息是,根据标示符(Identifier 以下称 ID)决定
优先级。ID 并不是发送的目的地址,而是表示访问总线的消息的优先级。

两个以上的单元同时
开始发送消息时,对各消息 ID 的每个位进行逐个仲裁。仲裁获胜(被判定为高优先级)的单元
可继续发送消息,仲裁失利的单元则立刻停止发送而转为接收模式。

4) 通信速度
 根据网络的规模,可设置合适的通信速度。在同一网络中,所有单元必须设置统一的通信速度

1.6 CAN 总线物理层的定义
CAN 协议经 ISO 标准后,有 ISO11898 标准和 ISO11519-2 标准两种。ISO11898 标准和 ISO11519-2 标准
对数据链路层定义相同,但对物理层定义不同。如图 1.4。
1) 关于 ISO11898
 ISO11898 是通信速度为 125kbps~1Mbps 的 CAN 高速通信标准。
2) 关于 ISO11519
 ISO11519 是通信速度 为 125kbps 以下的的 CAN 低速通信标准。
8. CAN 总线协议
8.1 帧的种类
通信是通过以下 5 种类型的帧进行的。
• 数据帧
• 遥控帧
• 错误帧
• 过载帧
• 帧间隔  
另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11 个位的标识符(Identifier: 以下称 ID),
扩展格式有 29 个位的 ID。
各种帧的用途如表 7 所示,各种帧的构成如图 11~图 15 所示。
表 7. 帧的种类及用途
帧            帧用途
数据帧   用于发送单元向接收单元传送数据的帧。
遥控帧   用于接收单元向具有相同 ID 的发送单元请求数据的帧。
错误帧   用于当检测出错误时向其它单元通知错误的帧。
过载帧   用于接收单元通知其尚未做好接收准备的帧。
帧间隔   用于将数据帧及遥控帧与前面的帧分离开来的帧。

 

 

8.2 数据帧
数据帧由 7 个段构成。
数据帧的构成如图 16 所示。
(1) 帧起始
表示数据帧开始的段。
(2) 仲裁段
表示该帧优先级的段。
(3) 控制段
表示数据的字节数及保留位的段。
(4) 数据段
数据的内容,可发送 0~8 个字节的数据。
(5) CRC 段
检查帧的传输错误的段。
(6) ACK 段
表示确认正常接收的段。
(7) 帧结束
表示数据帧结束的段。
下面对帧的构成进行说明。

 

 项目中用到的CAN。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM