找回密码
 立即注册
楼主: JimO***

STC32G12k128K 学习开始,打卡中~实验箱收到了~ !

[复制链接]
  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 64 天

    [LV.6]常住居民II

    8

    主题

    75

    回帖

    268

    积分

    中级会员

    积分
    268
     楼主| 发表于 2024-3-2 22:09:01 | 显示全部楼层
    本帖最后由 JimOrange 于 2024-3-2 23:18 编辑

    第二十八集:硬件模拟SPI。一共分成3组:独立SPI(支持DMA,direct memory access),两组USART的SPI(不支持DMA)
    截屏2024-03-02 22.15.15.png
    因为只有一组独立SPI,所以需要主动选择使用哪一组端口。


    截屏2024-03-02 22.24.47.png
    SPIF:读到0为正在读/写,读到1表示完成。
    WCOL:读到1为正在写数据。
    读写操作都需要清空SPIF、WCOL。

    截屏2024-03-02 22.35.39.png
    SPDAT:SPI数据寄存器/缓冲器,只有8位数据保存。读/写都通过SPDAT。



    SPCTL:SPI控制寄存器(重点)
    截屏2024-03-02 22.39.06.png

    SSIG:为0,则是互为主从模式,通过判断SS(Slave select)引脚确定哪个位主/从;         
               为1,则忽略SS引脚,使用MSTR位来判断主/从。
    SPEN1使能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为高电平。

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


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

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

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







    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 64 天

    [LV.6]常住居民II

    8

    主题

    75

    回帖

    268

    积分

    中级会员

    积分
    268
     楼主| 发表于 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

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 64 天

    [LV.6]常住居民II

    8

    主题

    75

    回帖

    268

    积分

    中级会员

    积分
    268
     楼主| 发表于 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)。


    起始信号:


    截屏2024-03-21 21.55.39.png

    发出ACK信号:

    ACK(SDA = 0)、NO_ACK(SDA = 1)
    截屏2024-03-21 21.56.15.png
    等待从机应答:
    先拉高SDA,然后再读取SDA,如果SDA等于0,表示正确,否则为错误。
    截屏2024-03-21 21.55.54.png

    停止信号:


    截屏2024-03-21 21.56.15.png

    地址:A2、A1、A0默认都接地,所以都为0. AT24C02默认地址格式:0x 1 0 1 0 A1 A2 A3 R/W(0为写入,1位读取)
    读取地址:0xA1, 写入地址:0xA0
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-20 17:53 , Processed in 0.058149 second(s), 37 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表