基於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讀寫的驅動,而且移植起來比較方便,功能比較齊全,使用的結果也是非常的順手,希望自己下次在移植的時候能用到。

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