JimOrange 发表于 2024-3-2 22:09:01

本帖最后由 JimOrange 于 2024-3-2 23:18 编辑

第二十八集:硬件模拟SPI。一共分成3组:独立SPI(支持DMA,direct memory access),两组USART的SPI(不支持DMA)。

因为只有一组独立SPI,所以需要主动选择使用哪一组端口。



SPIF:读到0为正在读/写,读到1表示完成。
WCOL:读到1为正在写数据。
读写操作都需要清空SPIF、WCOL。


SPDAT:SPI数据寄存器/缓冲器,只有8位数据保存。读/写都通过SPDAT。



SPCTL:SPI控制寄存器(重点)


SSIG:为0,则是互为主从模式,通过判断SS(Slave select)引脚确定哪个位主/从;         
         为1,则忽略SS引脚,使用MSTR位来判断主/从。
SPEN: 1使能SPI。


DORD:0为先接收/发送数据的高位(MSB);
            1为先接收/发送数据的低位(LSB)。
MSTR:主/从模式选择
             设置主机模式:MSTR必须为1
                           若SSIG为0,那么SS引脚需为高电平,因为通过高电平确定此芯片为主机;
                           若SSIG为1,则忽略SS引脚。


             设置从机模式:
                           若SSIG为0,那么SS引脚需为低电平,因为通过低电平确定此芯片为从机。与MSTR无关。
                           若SSIG为1,MSTR为0,忽略SS引脚。

CPOL:SPI时钟极性控制, 0为SCLK时钟空闲为低电平,1为高电平。

CPHA:SPI时钟相位控制,0为第一个时钟驱动完后采样,1为第二个时钟后采样。(不确定是否理解正确)


SPR: SPI时钟频率选择,                                             
               00:SPI时钟 / 4
                01:SPI时钟 / 8               
               10:SPI时钟 / 16
                11:SPI时钟 / 2

使能SPI一定要最后调用,因为过早打开会提前传输数据。

SPCTL = 1001 0000b;    //根据以上推断
SPEN = 1;







JimOrange 发表于 2024-3-21 18:15:25

本帖最后由 JimOrange 于 2024-3-21 18:41 编辑

第二十九集:SPI读取FLash芯片。W25X40CL简介。(我用的是W25Q32FV, 一个Page有256个字节,一个Sector有16个Page,一个Block有16个Sector,而这个Flash有0x3F个Block,也就是64个)。
写入使能 06h、读取状态寄存器 05h、写入数据(一个page)02h、读取数据03h、Sector擦除 20h

JimOrange 发表于 2024-3-21 20:04:14

本帖最后由 JimOrange 于 2024-3-21 23:47 编辑

第三十集:软件模拟IIC.
IIC是一种双向二线的串口通信。一个时钟线(SCK),一个数据线(SDA)。通过地址区分从设备。
1. 主机在空闲的时候(即SCK和SDA都是高电平),需要新发送一个start信号(SCK为高,SDA由1变为0);
2. 发送7个位的地址,和一位的读/写信号(0为写,1为读)。总共8位,一个字节的。
3. 会收到应答信号(ACK = 0);
4. 发送一个数据都会等待一个应答;重复。。。
5.当发送完成,就发送End信号(SCK为高,SDA由0变为1)。


数据的传输:
SCL为低电平,才允许SDA变化。 如果SDA变化好了,等SCL为高电平(1),此时SDA电平要保持,直到SCL为低电平(0)。


起始信号:




发出ACK信号:

ACK(SDA = 0)、NO_ACK(SDA = 1)

等待从机应答:
先拉高SDA,然后再读取SDA,如果SDA等于0,表示正确,否则为错误。


停止信号:




地址:A2、A1、A0默认都接地,所以都为0. AT24C02默认地址格式:0x 1 0 1 0 A1 A2 A3 R/W(0为写入,1位读取)
读取地址:0xA1, 写入地址:0xA0
页: 1 2 3 4 5 [6]
查看完整版本: STC32G12k128K 学习开始,打卡中~实验箱收到了~ !