【CC2640R2F】香瓜CC2640R2F之SPI读写W25Q80
本文末了修改时间:2022年01月08日 10:45一、本节简介
本节以simple_peripheral工程为例,先容怎样利用SPI读写W25Q80(外部flash)。
二、实验平台
1)CC2640R2F平台
①协议栈版本:CC2640R2 SDK v1.40.00.45
②编译软件:CCS7.3.0.00019
③硬件平台:香瓜CC2640R2F开辟板
④仿真器:香瓜XDS100V3下载器
2)外设
①板载在香瓜CC2640R2F开辟板底板上的芯片:W25Q80
三、版权声明
1)作者:甜甜的大香瓜
2)声明:喝水不忘挖井人,转载请注明出处。
3)纠错/业务相助:897503845@qq.com
4)香瓜BLE之CC2640R2F群:557278427
5)本文出处:原创连载资料《简单粗暴学蓝牙5》
6)完备开源资料下载地点(电脑端打开):
opengua.taobao.com
7)香瓜CC2640R2F开辟板购买链接:
https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4023-16963296339.8.21bfc58419sWKt&id=558653143169
四、实验条件
1、在举行本文步调前,请先阅读以下章节:
1)《简单粗暴学蓝牙5》的“第一章至第四章”章节。
2、在举行本文步调前,请先实现以下章节:
1)《简单粗暴学蓝牙5》的“第三章 软件的安装及利用”章节。
五、底子知识
1、W25Q80是什么?
答: W25Q80是winbond(华邦)公司出的8M bit(也就是1MB)的flash芯片。同系列常用的型号另有W25Q16(16Mb=2MB)、W25Q32(32Mb=4MB)等。
2、W25Q80的根本信息?
答:
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvOTBkOGY4ZDU0YmRmNGQxZjllNWEzZjIyYmI2ZWQwYTUucG5n
如上图,W25Q80一次可写256字节、可4K字节扇区擦除、32K大概64K块擦除、整片擦除。
利用的是SPI接口、2.7V~3.6V电压范围,香瓜购买的是8-pin SOIC 208-mil封装。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvODU0NmJmYTg1NzYwNDJlOWI1MTljZWEyMDRiZmNmNzQucG5n
如上图,W25Q80的厂商ID是0xEF,装备ID是0x13。这个用于初始化时辨认flash芯片用。
六、硬件原理
1、W25Q80芯片引脚图
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvOTVhYWIwM2I5YjlkNDcxN2JkYTQyY2Y2OTk3NDBkMzkucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNmIzMDgyMzc3NmU3NGQ2Njk3MmRhNTEzOWJlNjM0MTkucG5n
如上图,W25Q80一共8个脚,此中GND和VCC供电3.3V(范围在2.7V~3.6V)即可,其他4个SPI引脚DO(输出)、DI(输入)、CLK(时钟)、CS(片选)。
WP(写掩护)、HOLD(保持输入)这两个引脚本文并没有用到,且“/WP”中的“/”是低电平有用的意思,以是我们本文将WP和HOLD两引脚拉高到VCC即可。
2、W25Q80与香瓜CC2640R2F开辟板的对应关系
W25Q80引脚
香瓜CC2640R2F开辟板引脚
引脚1(/CS)
DIO_30
引脚2(DO)
DIO_8
引脚3(/WP)
置高到VCC
引脚4(GND)
GND
引脚5(DI)
DIO_9
引脚6(CLK)
DIO_10
引脚7(/HOLD)
置高到VCC
引脚6(VCC)
3.3V
3、硬件原理图
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvZDU3ZjJhNzAwMDA3NDYxYTllNjkzOTU2MzhkMGIzMTIucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvY2EwM2YwNzY5ODU2NGZhOTg0NGQ5MjllNmFjOWQxNGEucG5n
七、实验步调
1、编写并添加自界说的W25Q80驱动
1)写一个驱动GUA_ExtFlash.c(存放在“……
\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\GUA“路径下)
//**********************************************************************
//name: GUA_ExtFlash.c
//introduce: 外部flash驱动
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group: 香瓜BLE之CC2640R2F(557278427)
//shop: opengua.taobao.com
//changetime: 2021.08.02
//**********************************************************************
#include “string.h”
#include <ti/devices/cc26x0r2/driverlib/Ssi.h>
#include <ti/drivers/spi/SPICC26XXDMA.h>
#include <ti/drivers/dma/UDMACC26XX.h>
#include <ti/drivers/SPI.h>
#include “GUA_ExtFlash.h”
/*********************宏界说************************/
//SPI引脚
#define GUA_CC2640R2_SPI0_MISO IOID_8
#define GUA_CC2640R2_SPI0_MOSI IOID_9
#define GUA_CC2640R2_SPI0_CLK IOID_10
#define GUA_CC2640R2_SPI0_CSN PIN_UNASSIGNED
#define GUA_Spi_flash_CS IOID_30
//SPI片选开关宏
#define GUA_FLASH_CS_ON 0
#define GUA_FLASH_CS_OFF 1
/* Instruction codes */
#define GUA_BLS_CODE_PROGRAM 0x02 /**< Page Program */
#define GUA_BLS_CODE_READ 0x03 /**< Read Data */
#define GUA_BLS_CODE_READ_STATUS 0x05 /**< Read Status Register */
#define GUA_BLS_CODE_WRITE_ENABLE 0x06 /**< Write Enable */
#define GUA_BLS_CODE_SECTOR_ERASE 0x20 /**< Sector Erase */
#define GUA_BLS_CODE_MDID 0x90 /**< Manufacturer Device ID */
#define GUA_BLS_CODE_DP 0xB9 /**< Power down */
#define GUA_BLS_CODE_RDP 0xAB /**< Power standby */
/* Erase instructions */
#define GUA_BLS_CODE_ERASE_4K 0x20 /**< Sector Erase */
#define GUA_BLS_CODE_ERASE_32K 0x52
#define GUA_BLS_CODE_ERASE_64K 0xD8
#define GUA_BLS_CODE_ERASE_ALL 0xC7 /**< Mass Erase */
/* Bitmasks of the status register */
#define GUA_BLS_STATUS_SRWD_BM 0x80
#define GUA_BLS_STATUS_BP_BM 0x0C
#define GUA_BLS_STATUS_WEL_BM 0x02
#define GUA_BLS_STATUS_WIP_BM 0x01
#define GUA_BLS_STATUS_BIT_BUSY 0x01 /**< Busy bit of the status register */
/* Part specific constants */
#define GUA_BLS_PROGRAM_PAGE_SIZE 256
#define GUA_BLS_ERASE_SECTOR_SIZE 4096
/* Manufacturer IDs */
#define GUA_MF_MACRONIX 0xC2
#define GUA_MF_WINBOND 0xEF
typedef enum GUA_CC2640R2_SPIName {
GUA_CC2640R2_SPI0 = 0,
GUA_CC2640R2_SPICOUNT
} GUA_CC2640R2_SPIName;
SPICC26XXDMA_Object GUA_spiCC26XXDMAObjects[GUA_CC2640R2_SPICOUNT];
//SPI速率4M
#define GUA_SPI_BIT_RATE 4000000
//flash每页巨细4K
#define GUA_EXT_FLASH_PAGE_SIZE 4096
/*********************内部变量************************/
const SPICC26XXDMA_HWAttrsV1 GUA_spiCC26XXDMAHWAttrs[GUA_CC2640R2_SPICOUNT] = {
{
.baseAddr = SSI0_BASE,
.intNum = INT_SSI0_COMB,
.intPriority = ~0,
.swiPriority = 0,
.powerMngrId = PowerCC26XX_PERIPH_SSI0,
.defaultTxBufValue= 0,
.rxChannelBitMask = 1<<UDMA_CHAN_SSI0_RX,
.txChannelBitMask = 1<<UDMA_CHAN_SSI0_TX,
.mosiPin = GUA_CC2640R2_SPI0_MOSI,
.misoPin = GUA_CC2640R2_SPI0_MISO,
.clkPin = GUA_CC2640R2_SPI0_CLK,
.csnPin = GUA_CC2640R2_SPI0_CSN
}
};
const SPI_Config GUA_SPI_config[GUA_CC2640R2_SPICOUNT] = {
{
.fxnTablePtr = &SPICC26XXDMA_fxnTable,
.object = &GUA_spiCC26XXDMAObjects[GUA_CC2640R2_SPI0],
.hwAttrs = &GUA_spiCC26XXDMAHWAttrs[GUA_CC2640R2_SPI0]
},
};
const uint_least8_t GUA_SPI_count = GUA_CC2640R2_SPICOUNT;
static PIN_Config GUA_BoardFlashPinTable[] =
{
GUA_Spi_flash_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MIN, /* Ext. flash chip select */
PIN_TERMINATE
};
static PIN_Handle GUA_hFlashPin = NULL;
static PIN_State GUA_pinState;
// Supported flash devices
static GUA_ExtFlashInfo_t GUA_flashInfo[] =
{
{
.manfId = GUA_MF_MACRONIX,// Macronics
.devId = 0x15, // MX25R1635F
.deviceSize = 0x200000 // 2 Mbyte (16 Mbit)
},
{
.manfId = GUA_MF_MACRONIX,// Macronics
.devId = 0x14, // MX25R8035F
.deviceSize = 0x100000 // 1 Mbyte (8 Mbit)
},
{
.manfId = GUA_MF_WINBOND, // WinBond
.devId = 0x13, // W25Q80DV
.deviceSize = 0x100000 // 1 Mbyte (8 Mbit)
},
{
.manfId = GUA_MF_WINBOND, // WinBond
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]