DAY10-spi flash,RC522和485

167 阅读6分钟
title: DAY10
categories: STM32
abbrlink: cb1014ed
date: 2022-07-28 23:46:38

4.W25Q128芯片

(1)引脚信息和寄存器描述

CS WP HOLD都是低电平有效,WP和HOLD直接接高电平,功能关闭,片选信号低电平有效

支持SPI的CPOL,CPHA分别为0,0和1,1的情形

0

0

0

(2)操作时序

注意:在进行任何操作之前必须打开片选,操作完成后关闭片选,打开和关闭之间要有时间间隔。

1)读设备ID

0

发送90H ===> 发送240地址 ===> 发回厂家ID和设备ID(0xef 0x17)

练习:

修改spi的模式和速度,测试w25q128支持哪些方式。

2)读数据

发送03H ===> 发送读的24位地址 ===> 发回要读的数据

3)开启/关闭写使能

开启:发送06H
关闭:发送04H

4)读状态寄存器1

发送05H ===> 发回状态寄存器1的值

5)扇区擦除

开启写使能 ===> 延时 ===> 发送20H ===> 发送24位的擦除地址
===>等待擦除完成(查询状态寄存器1的BUSY位) ===> 关闭写使能

6)写数据

开启写使能 ===> 延时 ===> 发送02H ===> 发送24位的写地址 ===>发送写的数据
===>等待写完成(查询状态寄存器1的BUSY位) ===> 关闭写使能

练习:

通过蓝牙读取温湿度,当温度>27,将温度和采集时间写入到w25q128,并且可以蓝牙命令读出来。

(3)flash存储算法

flash写之前必须先擦除,但是擦除一次是一大块空,写可能只是写一小段,如果写一次擦一次,既浪费空间又影响寿命。为了更大效率使用flash存储空间,我们一般这么做

1.将整个扇区(擦除单位)分为很多个小块,比如说(16byte一块)
2.每个小块的第一个字节存固定的值(0xa5)表示该块正在使用,之后14个存具体数据
   最后一个字节存校验和
   0xa5+data1+data2+...+data14+checksum
   checksum = 0xa5+data1+data2+...+data14
3.使用flash写数据时先通过读找到未使用的位置,再开始写   

二十七.RFID读卡器

1.RFID的操作

初始化

(1)请求卡 ----------- 寻找附近有信号的卡

u8 MFRC522_Request(u8 reqMode, u8 *TagType);

(2)防碰撞 ----------- 选择一张信号最强的卡(得到卡ID)

u8 MFRC522_Anticoll(u8 *serNum) ;

(3)选卡 --------- 选择一张要通信的卡

u8 MFRC522_SelectTag(u8 *serNum);

(4)密钥验证 --------- 验证身份

u8 MFRC522_Auth(u8 authMode, u8 BlockAddr, u8 *Sectorkey, u8 *serNum);

(5)读写卡片 --------- 数据读写

u8 MFRC522_Read(u8 blockAddr, u8 *recvData);
u8 MFRC522_Write(u8 blockAddr, u8 *writeData);

2.和开发板的连接

0

练习:

读卡成功蜂鸣器短鸣一声,非法卡蜂鸣器长鸣一声

二十八.RS485

1.概念

RS485最先发明应用于仪器仪表的通信,用于替代RS232。由于RS232只能点对点通信,不能组网,而且是模分信号,抗干扰性和传输距离都收到限制。RS485解决了上述问题,其既可以组网,也可以通过差分信号增强抗干扰性和扩展了传输距离。

RS485属于主从通信,一般也是一个主机带多个从机

0

2.硬件连接

0

根据RS485标准,差分电压大于+200mV就表示1,差分电压小于-200mV表示0

3.M4开发板上的RS485

开发板上RS485接口通过芯片转换后连接到了USART2

0

4.485调试器

0

5.通信的参考代码

//模式控制
#define RS485_TX_EN PGout(8)  //0-接收 1-发送//发送
void rs485_send_data(u8 *pdata,u32 len)
{
    u32 i;
    
    RS485_TX_EN  = 1;
    delay_ms(1);
    for(i=0;i<len;i++){
        USART_SendData(USART2,pdata[i]);
        while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)!=SET);
    }
    delay_ms(1);
    RS485_TX_EN  = 0;
}
//接收
void USART2_IRQHandler(void)
{
    u8 data;
    
    //是不是接收中断
    if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET){
        //接收数据
        data = USART_ReceiveData(USART2);
        //原路发回
        usart1_putc(data);
        
        //清除中断标志
        USART_ClearITPendingBit(USART2,USART_IT_RXNE);
    }
}

二十九.CAN总线

1.概念

CAN指的是控制器局域网网络(Controller Area Network),由德国的汽车电子厂商博世公司开发。

CAN是差分信号,具有较强的抗干扰能力和传输稳定性

CAN属于多主通信,网络中所有的设备都可以作为主设备发起通信

CAN的网络扩展非常简单,在CAN网络中扩展新的单元,网络中的旧单元的软硬件无需做任何修改。

CAN具有较强的纠错能力,容易发现传输中的错误。

2.CAN的差分信号

模分信号采用单根数据线的电平表示逻辑的差别,差分信号采用两个数据线,使用两个先的电压差值俩表示逻辑值。CAN传输使用两根数据线 --------- CANH和CANL

高速ISO11898标准:

如果CANH(3.5V)和CANL(1.5V)的电压差 = 2V,此时表示逻辑0,叫做显性电平
如果CANH(2.5V)和CANL(2.5V)的电压差 = 0V,此时表示逻辑1,叫做隐性电平
//如果多个控制单元同时控制总线电平,最终显示的是显性电平(0)

3.CAN通信协议

CAN通过五种通信帧实现通信,以数据帧来介绍帧结构

0

数据帧分析

数据帧分为标准数据帧和扩展数据帧

D - 显示电平 R - 隐性电平

0

数据帧由7部分组成

0

(1)帧起始

一位显性电平(0)

(2)仲裁段

既可以用来表示帧的优先级,也用来实现帧的过滤

0

1.标准帧
    标准帧的仲裁段由11位ID和1位RTR位组成,RTR用来区分数据帧(显性电平)和遥控帧
    
2.扩展帧
    扩展帧的仲裁段由29位ID,1位RTR,1位SRR和1位IDE组成,RTR用来区分数据帧(显性电平)和遥控帧
    SRR用于代替标准帧中的RTR位,由于SRR是隐性电平,RTR是显性电平,相同ID的标准帧优先级高于扩展帧
    IDE用于区分标准帧(RTR下一位)和扩展帧,显示电平表示标准帧,隐性电平表示扩展帧
    
报文的优先级由ID仲裁来决定,通过总线上同时出现显性电平和隐性电平时,最终结果为显性电平的特性来实现仲裁
当多个节点同时竞争总线占有权时,谁先出现隐性电平,将失去总线占有权,转为接收状态。

作业:

实现按S1,进入刷卡登记模式,登记合法的卡

按S2,进入刷卡验证模式,验证是否是合法卡