基于nRF52832的sfud驱动移植

1.基本内容介绍
移植一款关于flash读写操作的驱动,sfud俗称是flash的万能驱动,移植的内容为两个文件夹的内容,然后稍作修改即可使用,这两个文件夹的内容放在百度云里面,有需要可以url,如下图;
这里写图片描述
这两个文件包含基本的驱动,以及一些对flash的读写的接口。总共大小为200k左右
下面废话不多说,介绍具体怎么移植

2、移植的过程
(1)先获取这两个文件夹,可在官网上下载,或者直接联系我都可
(2)将这两个文件加入到工程里面,我是用的是keil,加入只有的目录如上图。
(3)修改
原理图:
这里写图片描述

这个片子有两个spi,分别为spi0和spi1,它是和i2c互斥的功能,比如使用了i2c0就不能使用spi0,因为之前已经使用了i2c0,所以这里选择使用spi1.

怎么使用spi1,这个需要在nordic的配置文件里面修改,修改的路径为
\nRF5_SDK_11.0.0_89a8197_app_boot_v1.5\examples\ble_peripheral\ble_app_uart\config\ble_app_uart_s132_pca10040
因为这里使用的是s132,如果是使用的其他的芯片的,需要对应打开spi这个驱动。
打开之后,
这里写图片描述

将对应的引脚填入即可,这个时候,需要修改一下本地的spi的驱动的接口和适配一下sufd的驱动的接口,如下:
先修改sfud的端口:
修改的文件在加入工程的驱动文件里面
在自己的文件中定义pin
//SPI PIN
/* output: SPI Master out /
#define SPI_MOSI_PIN 25
/
Input: SPI Master in /
#define SPI_MISO_PIN 26
/
output: SPI Master Clock */
#define SPI_SCK_PIN 27

/* Output: SPI Chip Select (CS_N) */
#define SPI_CSN_PIN 28
#define SPI_PORT_NUM 1
#define SPI_PORT NRF_SPI1 //选择芯片的spi1

修改文件sfud_port.c;(在之前加入的驱动的两个文件里面)。主要就是修改上面三个参数,对比搜索一下文件中上述三个定义的位置,替换成为自己的就可以了

比如SPI_PORT ,这个在文件中的位置为
nrf_spi_enable(SPI_PORT); // 时钟初始化
通过直接操作寄存器来使能这个spi1
在文件中很多,直接替换为自己的即可

将这个三个修改完之后,基本上可以编译了,然后怎么读写flash
(1)初始化,如下函数,已经写好,直接调用即可
easyflash_init();
(2)将数据写入缓冲中
void set_appmode_env(uint8_t mode)
{
char buf[10] = {0};

sprintf(buf,"%d",mode);

ef_set_env(“app mode”, buf);
}
将数据写入缓冲中,此时并没有写入,防止频繁的写入,导致的问题,可以在重启的瞬间将数据写入
真正的写入接口为
void save_env_flash(void)
{
EfErrCode result;
result = ef_save_env();
if(result != EF_NO_ERR)
{
ef_save_env();
}
}

(3)读flash
temp_string = ef_get_env(“app mode”);
if(temp_string != NULL)
{
strcpy(temp,temp_string);
app_mode = strtol(temp,NULL,10);
set_app_mode(app_mode);
}
else
{
app_mode = APP_TEST_MODE;
set_app_mode(app_mode);
}

(4)删除flash中的内容
void delete_env(void)
{
ef_erase_env();
}

基本的操作就是初始化,读写擦除,因为觉得这是一款很好用的flash读写的驱动,而且移植起来比较方便,功能比较齐全,使用的结果也是非常的顺手,希望自己下次在移植的时候能用到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章