void SPI_Flash_Read(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead) { u16 i; W25QXX_CS(0); //使能器件 SPI1_ReadWriteByte(W25X_READ_DATA); //发送读取命令 SPI1_ReadWriteByte((u8)((ReadAddr) >> 16)); //发送24bit地址 SPI1_ReadWriteByte((u8)((ReadAddr) >> 8)); SPI1_ReadWri...
DataArry[i] = MySPI_ReadWrite_Byte(W25Q64_DUMMY_BYTE); } MySPI_Stop(); } W25Q64.h #ifndef__W25Q64_H#define__W25Q64_HvoidW25Q64_Init(void);voidW25Q64_Write_ENABLE(void);uint8_tW25Q64_Read_SR1(void);voidW25Q64_Write_Data(uint32_tAddress,uint8_t*Data,uint16_tData_Count);void...
SD_SPI_ReadWriteByte函数进行10读写操作,,同时产生80个时钟信号,满足SD卡初始化至少需要74个时钟的要求;(3)调用SD_SendCmd函数发送CMD0命令,复位SD卡同时进入空闲状态;(4 Eloooly2023-03-06 15:21:46 RISC-V MCU开发实战 (二):SD初应用 SD_SPI_Init函数初始化GPIO口及SPI工作模式,同时控制片选引脚使之输...
Bus-Width 的作用是指定地址总线到 Master 设备之间数据传输的单位。 例如, 我们想要往 Master 设备里面的 SSPBUF 写入 16 Byte 大小的数据: 首先, 给 Master 设备的配置寄存器设置 Bus-Width 为 Byte; 然后往 Master 设备的 Tx-Data 移位寄存器在地址总线的入口写入数据, 每次写入 1 Byte 大小的数据(使用 wri...
byte=SPI1_ReadWriteByte(0Xff); // 写个无效数据,把要读取的数据移出来 W25QXX_CS=1; // return byte; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 这个是读ID的指令,代码如下: AI检测代码解析 u16 W25QXX_ReadID(void) { u16 Temp = 0; ...
SPI2_ReadWriteByte((u8)ReadAddr);for(i=0;i { pBuffer=SPI2_ReadWriteByte(0XFF); //循环...
//指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始SPI_InitStructure.SPI_CRCPolynomial=6;//CRC值计算的多项式SPI_Init(SPI1,&SPI_InitStructure);//根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器SPI_Cmd(SPI1,ENABLE);//使能SPI外设SPI1_ReadWriteByte(0xff);//启动传输}//SPI1速度设置函数//...
SPI_Readbyte(u8 data) { While(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//等待发送缓冲区为空 SPI_I2S_SendData(SPI1,Data); While(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);//等待接收到一个字节数据 ...
这段代码利用控制CS引脚电平的宏“W25QXX_CS”以及前面编写的单字节收发函数SPI1_ReadWriteByte,很清晰地实现了读ID指令的时序,最后把读取到的这3个数据合并到一个变量Temp中,然后作为函数返回值,把该返回值与我们定义的芯片ID对比,即可知道FLASH芯片是否正常。 代码清单5:W25Q32写使能和写禁止函数 由于FLASH存储器...
//返回值:读取到的字节 u8 SPI1_ReadWriteByte(u8 TxData){ while (SPI_I2S_GetFlagStatus(SPI1,...