微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 有哪位大神可以讲解一下这个时序图怎么理解?

有哪位大神可以讲解一下这个时序图怎么理解?

时间:10-02 整理:3721RD 点击:


有哪位大神可以讲解一下这个时序图怎么理解啊,比如这里SCK一会儿高电平,一会儿低怎么对应MOSI,MISO的数据读写啊,还有MOSI对八个数据,MISO又读多少个呢?

INT8U NFC_MISO_Status(void)
{
        if(gpio_read_io(NFC_MISO))
                return 1;
        else
                return 0;
}
INT8U NFC_SPI_ReadByte(void)
{
     INT8U rByte=0;
         INT8U i;
                gpio_write_io(NFC_NSS, DATA_LOW);
                for(i=0;i<8;i++)
                {
                        gpio_write_io(NFC_SCK, DATA_LOW);
                        TimerDelayus(2);
                        rByte<<=1;
                        if(NFC_MISO_Status())
                                rByte|=1;
                        gpio_write_io(NFC_SCK, DATA_HIGH);
                        TimerDelayus(8);       
                }
                gpio_write_io(NFC_SCK, DATA_LOW);
                return rByte;
}
void NFC_SPI_WriteByte(INT8U wByte)
{
         INT8U i;
                gpio_write_io(NFC_NSS, DATA_LOW);
                for(i=0;i<8;i++)
                {
                        gpio_write_io(NFC_SCK, DATA_LOW);
                        TimerDelayus(8);
                        if(wByte&0x80)
                        {
                                gpio_write_io(NFC_MOSI, DATA_HIGH);
                        }
                        else
                        {
                                gpio_write_io(NFC_MOSI, DATA_LOW);
                        }
                        wByte=wByte<<1;
                        gpio_write_io(NFC_SCK, DATA_HIGH);
                        TimerDelayus(2);
                }
                gpio_write_io(NFC_SCK, DATA_LOW);       
                //gpio_write_io(NFC_NSS, DATA_HIGH);               
}
/*
** function : NFC_AM4K_WriteReg
** return: None
** parameter: (1)INT8U addr--addr
**                         (2)INT8U value--write value
*/
void NFC_AM4K_WriteReg(INT8U addr, INT8U value)
{
    gpio_write_io(NFC_NSS, DATA_LOW);       //CS low
    NFC_SPI_WriteByte(addr&0x7F);                         //SPI write addr
    NFC_SPI_WriteByte(value);                           //SPI write data
    gpio_write_io(NFC_NSS, DATA_HIGH);      //CS  high
}
/******************
* *        function name:NFC_AM4K_ReadReg
* *        return: value - read the register values
* *         reference number, addr - register address
* *  said: NFC_AM4K register read function
************************************/
INT8U NFC_AM4K_ReadReg(INT8U addr)
{
    INT8U value;
    gpio_write_io(NFC_NSS, DATA_LOW);  //CS low
    NFC_SPI_WriteByte(addr|0x80);                  //SPI write addr
    value = NFC_SPI_ReadByte();                  //SPI write data
    gpio_write_io(NFC_NSS, DATA_HIGH);  //CS high
    return value;
}

小编你好  你的图片显示有问题  希望你可以用编辑器里的图片工具重新上传哦!

这个小编你的图片挂了         

SCK是时钟,当然得高低变化的,MOSI MISO一个是写,一个是读,你看是时钟上升沿有效还是下降沿有效就可以了

SPI时序问题,摆渡可解。

你的图片有问题,我们看不到啊。

没有啊,图片没有什么不对的啊

没有啊,图片没有什么不对的啊

为什么我看得到啊

重发一下图,


你的这个时序图是24L01的时序吧

小编 我帮你将你的图片重新挂在主题帖里了 并推荐了你的问题 希望你可以得到满意的回答

以上是 SPI 读写
自己参考
这个是写函数  把数据value写到addr地址
void NFC_AM4K_WriteReg(INT8U addr, INT8U value)
{
    gpio_write_io(NFC_NSS, DATA_LOW);       //CS low
    NFC_SPI_WriteByte(addr&0x7F);                         //SPI write addr
    NFC_SPI_WriteByte(value);                           //SPI write data
    gpio_write_io(NFC_NSS, DATA_HIGH);      //CS  high
}
/******************
* *        function name:NFC_AM4K_ReadReg
* *        return: value - read the register values
* *         reference number, addr - register address
* *  said: NFC_AM4K register read function
************************************/
这是读函数 从地址addr里读取
INT8U NFC_AM4K_ReadReg(INT8U addr)
{
    INT8U value;
    gpio_write_io(NFC_NSS, DATA_LOW);  //CS low
    NFC_SPI_WriteByte(addr|0x80);                  //SPI write addr
    value = NFC_SPI_ReadByte();                  //SPI write data
    gpio_write_io(NFC_NSS, DATA_HIGH);  //CS high
    return value;
}

你应该还不会看时序图吧,你可以百度一下时序图,百度百科讲得很明白。

这是一个flash的时序图,我们读取时序图的时候要遵循,从上到下,从左到右,最上面的csn代表控制端,类似于cs端,低电平有效,再下来sck是时钟,然后mosi和moso,一个是命令地址等,一个是发送数据。接着我们从左到右,csn为低电平有效,然后时钟也有效,mosi发送一段地址或者命令,miso发送了一段数据。然后自己按照楼上给的程序一步步看吧

以上是 SPI 读写

时序是从左往右读的,图中的意思的,CSN拉低后开始进行SPI的操作,SPI读取数据是先需要向从设备发送一个字节的读取指令(暂时这么叫吧),即图中的MOSI部分的前八个脉冲(图中描述为C0~C7),此时MISO为(S0~S7)随机状态,然后从设备向主设备发送两个字节,低字节在前。上述中,发送和接收都需要有时钟脉冲的,也就是图中的CLK部分。数据帧结束后,CSN拉高,表示当前数据帧发送或者接收完成了。

非常感谢谢

在CSN片选选中后(低电平)后,先发数据,后拉高时钟,此时的数据有效。简单来说就是在sck时钟上升沿时,数据线上的数据才有效。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top