OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4809|回复: 0

LPSPI操作数据FLASH 数据错位,注意不是操作FLexSPI

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-12-5
在线时间
1 小时
发表于 2019-12-5 16:38:25 | 显示全部楼层 |阅读模式
2金钱
我在配置好SPI 参数后,读取设备ID,一共有4个变量,示波器上看到的波形数据 顺序是  00  C2  20  16,但是寄存器里面的顺序是16 00 C2 20 ,但是我在读取设备ID函数 每句话都打断点 慢慢跑的话  数据顺序 就正确 是 00 C2 20 16 ,下面是我的配置和发送接收函数 还有读取设备ID 函数 求大佬帮忙看看 哪里有问题

//SPI2  读设备ID
uint32_t SPI2_Read_ID(void)
{
        uint8_t test=0,Factory_Number=0,Storage_type=0,Capacity=0;
        uint32_t Device_ID=0;
        SPI2_CS_0;
        test = SPI2_Send_Byte(0X9F);//读取指令
        Factory_Number=SPI2_Read_Byte();//编号
        Storage_type=SPI2_Read_Byte();//类型
        Capacity=SPI2_Read_Byte();// 容量
        Device_ID=((Factory_Number<<16)|(Storage_type<<8)|(Capacity));
        SPI2_CS_1;
        return Device_ID;
}
void SPI_FLASH_GPIO_Init(void)
{
        lpspi_master_config_t FLASH_config;
        gpio_pin_config_t GPIO_InitStructure;
        //CS
        IOMUXC_SetPinMux(IOMUXC_GPIO_EMC_11_GPIO2_IO11,0U);
        IOMUXC_SetPinConfig(IOMUXC_GPIO_EMC_11_GPIO2_IO11,0x10B0u);
        GPIO_InitStructure.direction=kGPIO_DigitalOutput;
        GPIO_InitStructure.interruptMode=kGPIO_NoIntmode;
        GPIO_InitStructure.outputLogic=1;
        GPIO_PinInit(CS_SPI_GPIO_BASE,CS_SPI_GPIO_PIN,&GPIO_InitStructure);//SCL
        //CLK  MOSI MISO
        IOMUXC_SetPinMux(IOMUXC_GPIO_EMC_10_LPSPI2_SCK, 0U);
        IOMUXC_SetPinMux(IOMUXC_GPIO_EMC_12_LPSPI2_SDO, 0U);
        IOMUXC_SetPinMux(IOMUXC_GPIO_EMC_13_LPSPI2_SDI, 0U);
        IOMUXC_SetPinConfig(IOMUXC_GPIO_EMC_10_LPSPI2_SCK,0x10B0u);
        IOMUXC_SetPinConfig(IOMUXC_GPIO_EMC_12_LPSPI2_SDO,0x10B0u);
        IOMUXC_SetPinConfig(IOMUXC_GPIO_EMC_13_LPSPI2_SDI,0x10B0u);
        /*  LPSPI 默认配置
    masterConfig->baudRate = 500000;
    masterConfig->bitsPerFrame = 8;
    masterConfig->cpol = kLPSPI_ClockPolarityActiveHigh;   CPOL=0
    masterConfig->cpha = kLPSPI_ClockPhaseFirstEdge;       CPHA=0
    masterConfig->direction = kLPSPI_MsbFirst;

    masterConfig->pcsToSckDelayInNanoSec = 1000000000 / masterConfig->baudRate * 2;
    masterConfig->lastSckToPcsDelayInNanoSec = 1000000000 / masterConfig->baudRate * 2;
    masterConfig->betweenTransferDelayInNanoSec = 1000000000 / masterConfig->baudRate * 2;

    masterConfig->whichPcs = kLPSPI_Pcs0;
    masterConfig->pcsActiveHighOrLow = kLPSPI_PcsActiveLow;

    masterConfig->pinCfg = kLPSPI_SdiInSdoOut;
    masterConfig->dataOutConfig = kLpspiDataOutRetained;
        */
        LPSPI_MasterGetDefaultConfig(&FLASH_config);
        LPSPI_MasterInit(LPSPI2,&FLASH_config,132000000);
        LPSPI_Enable(LPSPI2,true);
}


//发数据
uint8_t SPI2_Send_Byte(uint8_t TXData)
{
        uint8_t TXDummy;
        uint16_t retry=0;
        LPSPI_WriteData(LPSPI2,TXData);
        while ((LPSPI_GetStatusFlags(LPSPI2)>>24)&0x01 == 1)       
        {
                retry++;
                if(retry>=1000)
                        return 0;
        }
        TXDummy=LPSPI_ReadData(LPSPI2);//&#182;áè&#161;êy&#190;Y &#199;&#229;&#191;&#213;FIFO
        return TXDummy;
}

//读数据
uint8_t SPI2_Read_Byte(void)
{
        uint8_t RXDummy;
        uint16_t retry=0;
        LPSPI2->TDR=0XFF;
        while ((LPSPI_GetStatusFlags(LPSPI2)>>24)&0x01 == 1)
        {
                retry++;
                if(retry>=1000)
                        return 0;
        }
        RXDummy=LPSPI_ReadData(LPSPI2);               
        return RXDummy;
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 11:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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