当前位置: 首页> 健康> 养生 > 企业推广方法_嵌入式开发工程师是干嘛的_cba排名最新排名_中国十大关键词

企业推广方法_嵌入式开发工程师是干嘛的_cba排名最新排名_中国十大关键词

时间:2025/7/12 20:38:05来源:https://blog.csdn.net/he30837993/article/details/146488326 浏览次数:0次
企业推广方法_嵌入式开发工程师是干嘛的_cba排名最新排名_中国十大关键词

W25Q128.c 

#include "w25q128.h"#if 1//TCFG_W25Q128_ENABLE#define SPI1_CS_OUT()             \do                            \{                             \JL_PORTC->DIR &= ~BIT(2); \JL_PORTC->DIE |= BIT(2);  \JL_PORTC->PU &= ~BIT(2);  \JL_PORTC->PD &= ~BIT(2);  \} while (0)#define SPI1_CS_L() (JL_PORTC->OUT &= ~BIT(2))
#define SPI1_CS_H() (JL_PORTC->OUT |= BIT(2))static spi_dev spi1_hdl = 1;void w25q128_pwr_up(void)
{gpio_set_pull_up(SD_PWR_PORT, 0);gpio_set_pull_down(SD_PWR_PORT, 0);gpio_set_direction(SD_PWR_PORT, 0);gpio_set_output_value(SD_PWR_PORT, 1);
}
void w25q128_pwr_down(void)
{gpio_set_pull_up(SD_PWR_PORT, 0);gpio_set_pull_down(SD_PWR_PORT, 0);gpio_set_direction(SD_PWR_PORT, 0);gpio_set_output_value(SD_PWR_PORT, 0);
}void w25q128_spi_send_byte(u8 byte)
{spi_send_byte(spi1_hdl, byte);
}u8 w25q128_spi_recv_byte(void)
{return spi_recv_byte(spi1_hdl, NULL);
}// 读取设备ID
void w25q128_read_id(u8 *manuf_id, u8 *device_id, u8 *flash_id)
{SPI1_CS_L();w25q128_spi_send_byte(W25X_JedecDeviceID);*manuf_id = w25q128_spi_recv_byte();*device_id = w25q128_spi_recv_byte();*flash_id = w25q128_spi_recv_byte();SPI1_CS_H();
}
static u8 w25q128_read_status_reg(void)
{u8 status;SPI1_CS_L();w25q128_spi_send_byte(W25X_ReadStatusReg);status = w25q128_spi_recv_byte();SPI1_CS_H();return status;
}
// 检查设备是否忙碌(返回1=忙,0=就绪)
u8 w25q128_busy(void)
{return (w25q128_read_status_reg() & WIP_Flag);
}// 擦除扇区(4KB)
void w25q128_sector_erase(u32 addr)
{SPI1_CS_L();w25q128_spi_send_byte(W25X_WriteEnable);SPI1_CS_H();SPI1_CS_L();w25q128_spi_send_byte(W25X_SectorErase);w25q128_spi_send_byte((addr >> 16) & 0xFF);w25q128_spi_send_byte((addr >> 8) & 0xFF);w25q128_spi_send_byte(addr & 0xFF);SPI1_CS_H();while(w25q128_busy()); // 等待擦除完成
}// 页编程(最大256字节)
void w25q128_page_write(u32 addr, u8 *buf, u16 len)
{SPI1_CS_L();w25q128_spi_send_byte(W25X_WriteEnable);SPI1_CS_H();SPI1_CS_L();w25q128_spi_send_byte(W25X_PageProgram);w25q128_spi_send_byte((addr >> 16) & 0xFF);w25q128_spi_send_byte((addr >> 8) & 0xFF);w25q128_spi_send_byte(addr & 0xFF);for(u16 i=0; i<len; i++) {w25q128_spi_send_byte(buf[i]);}SPI1_CS_H();while(w25q128_busy()); // 等待写入完成
}// 读取数据
void w25q128_read(u32 addr, u8 *buf, u32 len)
{SPI1_CS_L();w25q128_spi_send_byte(W25X_ReadData);w25q128_spi_send_byte((addr >> 16) & 0xFF);w25q128_spi_send_byte((addr >> 8) & 0xFF);w25q128_spi_send_byte(addr & 0xFF);for(u32 i=0; i<len; i++) {buf[i] = w25q128_spi_recv_byte();}SPI1_CS_H();
}void w25q128_init()
{u8 manuf_id = 0, device_id = 0, flash_id = 0;u8 buf[256];u8 read_buf[256] = {0};spi_open(spi1_hdl);w25q128_pwr_up();SPI1_CS_OUT();SPI1_CS_H();puts(">>> spi w25q128_init start\n");w25q128_read_id(&manuf_id, &device_id, &flash_id);printf("manuf_id:0x%x,device_id:0x%x,flash_id:0x%x\n", manuf_id, device_id, flash_id);if(manuf_id != 0xEF || device_id != 0x40 ){printf("w25q128 init error\n");return;}// 擦除扇区w25q128_sector_erase(0x000000);for(u8 i=0;i<256;i++){buf[i] = i;}// 写入数据w25q128_page_write(0x000000, buf, 256);// 读取数据w25q128_read(0x000000, read_buf, 3);// 比较数据printf("read_buf[0]:%d read_buf[1]:%d read_buf[2]:%d \n", read_buf[0], read_buf[1], read_buf[2]);puts("<<< spi w25q128_init end\n");
}
#endif

W25Q128.h 

#ifndef _w25_q128_H_
#define _w25_q128_H_#include "system/includes.h"
#include "media/includes.h"
#include "asm/spi.h"
#include "generic/log.h"#define SD_PWR_PORT   IO_PORTB_11#define WIP_Flag      (1 << 0)  //写保护标志位// 指令集
#define W25X_WriteEnable        0x06
#define W25X_WriteDisable       0x04
#define W25X_ReadStatusReg      0x05
#define W25X_WriteStatusReg     0x01
#define W25X_ReadData           0x03
#define W25X_FastReadData       0x0B
#define W25X_PageProgram        0x02
#define W25X_BlockErase         0xD8
#define W25X_SectorErase        0x20
#define W25X_ChipErase          0xC7
#define W25X_PowerDown          0xB9
#define W25X_ReleasePowerDown   0xAB
#define W25X_DeviceID           0x90
#define W25X_JedecDeviceID      0x9Fvoid w25q128_init();
void w25q128_pwr_up(void);#endif

关键字:企业推广方法_嵌入式开发工程师是干嘛的_cba排名最新排名_中国十大关键词

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: