野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6097|回复: 0

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

[复制链接]
发表于 2019-12-5 17:25:18 | 显示全部楼层 |阅读模式
我在配置好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;
}



回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-29 20:52 , Processed in 0.030204 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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