因为SPI NOR Flash品种繁复,咱们每次运用SPI NOR Flash时,都消耗许多时刻在阅览相关的手册上。AMetal助你快速完结Flash功用!即便不阅览Flash芯片手册,也能顺畅运用,能够把专心力投入到运用优化和算法中,提高产品质量。
AMetal渠道供给了IS25xx、MX25xx等系列SPI NOR Flash的组件,供给初始化函数及丰厚的功用接口。
本次介绍所运用的SPI NOR Flash为:IS25LP064A。IS25LP064A是ISSI的其间一款存储芯片,选用SOIC封装,50MHz正常读取,DTR高达66MHz,超越100000次擦除,具有高灵活性和高性能。该器材可通过4线SPI接口拜访,支撑SPI形式0和形式3。该芯片可编程页巨细为256Bytes,可选择的擦除方法为:扇区擦除、块擦除、整片擦除。
运用之前,有必要先完结该芯片的初始化,初始化IS25xx的函数如图1所示,完结初始化后为设备的驱动函数供给实例化句柄。
图1 IS25xx初始化接口函数
1.am_is25xx_dev_t为IS25xx的设备实例,为整个外设驱动供给必要的内存空间,用户只需求运用设备结构体类型界说一个变量即可;
2.am_is25xx_devinfo_t为IS25xx的设备信息,包含运用的SPI形式、SPI片选引脚、运用的SPI速率以及器材类型,用户按实际运用进行装备即可正常作业;
3.IS25初始化函数中am_spi_handle_t为主机MCU的SPI初始化,AMetal渠道支撑的MCU供给了规范化的SPI接口函数及初始化函数,实际运用时,一般只需依据实际情况装备SPI运用的引脚,供给SPI规范服务句柄。
IS25实例初始化函数为:
在硬件衔接共同的情况下,可直接调用IS25xx实例初始化函数完结SPI Flash的初始化:
am_is25xx_handle_t is25xx_handle = am_microport_flash_is25xx_inst_init(void);
SPI Flash比较特别,在写入数据之前有必要保证相应的地址单元现已被擦除,因而除了读、写函数外,还有一个擦除函数。IS25功用接口函数如图2所示。
图2 IS25xx功用接口函数
1.擦除
擦除便是将数据悉数重置为0xFF,即一切存储单元的位设置为1。擦除操作不能直接擦除某个单一地址单元,擦除的最小单元是扇区,IS25一个扇区巨细为4KB,即每次只能擦除单个或多个扇区。擦除函数原型为:
int am_is25xx_erase(am_is25xx_handle_t handle, uint32_t addr, uint32_t len);
其间,handle为IS25xx的实例句柄,addr为待擦除区域的首地址,因为擦除的最小单元为扇区,因而该地址有必要为某个扇区的开端地址,len为擦除长度,有必要为扇区巨细的整数倍。回来AM_OK,阐明擦除成功;
2.写入数据
在写入数据前,有必要保证写入地址已被擦除。即需求变为0的位清0,写入操作无法将0变为1。从指定的开端地址开端写入一段数据的函数原型为:
int am_is25xx_write(am_is25xx_handle_t handle, uint32_t addr, uint8_t *p_buf, uint32_t len);
其间,addr为待写入区域的首地址,只需保证addr之后的区域现现已过擦除,则能够从该芯片中任一存储地址开端写入,len为写入数据长度。回来AM_OK,阐明写入数据成功;
3.读取数据
从指定的开端地址开端读取一段数据的函数原型为:
int am_is25xx_read(am_is25xx_handle_t handle, uint32_t addr, uint8_t *p_buf, uint32_t len);
其间,addr为待读取区域的首地址,能够指定该芯片中任一存储地址开端读取,len为读取数据长度。回来AM_OK,阐明读取数据成功。
因为读、写数据需求的缓存空间较大,最好从大局数据区域中分配缓存。假如直接从函数的运行栈中分配较大字节空间,则彻底有或许导致栈溢出,从而体系溃散。
AMetal渠道供给了较全面的功用接口函数,一切接口函数均脱离底层,不与详细硬件绑定,切换MCU可快速移植。AMetal助你快速完结SPI Flash功用,将专心力投入到中心运用部分,让具有竞争力的产品更快走向市场!