RK3568筆記分享——如何掛載SPI FRAM鐵電存儲芯片
本文將借助飛凌嵌入式OK3568-C開發(fā)板來為大家介紹一種采用FRAM的方案—— 使用SPI0掛載PB85RS2MC (FRAM) 芯片。本文所描述的驅(qū)動文件和應(yīng)用文件,可聯(lián)系飛凌嵌入式的技術(shù)支持獲取。
修改思路——
我們要添加一個(gè)SPI設(shè)備,需要進(jìn)行如下操作:在設(shè)備樹中添加描述→設(shè)備樹描述中對應(yīng)設(shè)備驅(qū)動→設(shè)備驅(qū)動添加到內(nèi)核。
修改結(jié)果——
修改 OK3568-linux-source/kernel/arch/arm64/boot/dts/rockchip/OK3568-C-common.dtsi
修改如下:
接下來筆者為大家介紹一下適配的過程。
1、驅(qū)動程序
我們在menuconfig中搜索fm25、pb85等比較常用的FRAM字眼,發(fā)現(xiàn)并沒有類似的驅(qū)動程序,這時(shí)就需要手寫或者移植一個(gè)驅(qū)動程序。在搜遍各大網(wǎng)站之后找到了一個(gè)W25Q64的驅(qū)動,對比了一下PB85RS2MC的各種操作碼以后,發(fā)現(xiàn)兩者的操作碼大差不差,因此就決定將W25Q64的驅(qū)動移植過來。根據(jù)PB85RS2MC芯片手冊中敘述,各種操作碼為:
因此,在驅(qū)動程序中宏定義以下操作碼,以便在接下來的驅(qū)動程序中使用:
首先要在驅(qū)動程序中進(jìn)行初始化函數(shù)和退出函數(shù),也就是spidev_init和spidev_exit,init函數(shù)里就是進(jìn)行字符設(shè)備的初始化,注冊等的操作,exit函數(shù)就是要把我們注冊的東西在退出時(shí)都釋放掉,再者就是驅(qū)動程序和設(shè)備樹匹配,匹配是通過compatible屬性值匹配的,這里我們一定要和設(shè)備樹中的compatible屬性值一致,否則會匹配不成功。驅(qū)動程序中.compatible值如下圖所示。
驅(qū)動和設(shè)備樹匹配成功以后就要執(zhí)行probe函數(shù),這里probe函數(shù)執(zhí)行了一些初始化和注冊主次設(shè)備號的操作。我們可以通過是否打印spi_probe success!來判斷驅(qū)動程序,是否和設(shè)備樹匹配成功。
從PB85RS2MC芯片手冊中看讀的條件,讀取FRAM存儲單元的數(shù)據(jù),需要READ的操作碼,任意24位地址輸入到SI。第一個(gè)spi_transfer 結(jié)構(gòu)體用于發(fā)送命令cmd 到SPI設(shè)備,在讀取數(shù)據(jù)之前準(zhǔn)備設(shè)備,第二個(gè)是發(fā)送地址到SPI設(shè)備,第三個(gè)是接收從設(shè)備讀取的數(shù)據(jù)。
這段代碼實(shí)現(xiàn)了從 SPI設(shè)備中同步讀取數(shù)據(jù),并將數(shù)據(jù)復(fù)制到用戶空間的功能。
從PB85RS2MC芯片手冊中看寫的條件,WREN命令用于設(shè)置寫使能鎖存器。需要在寫操作(WRITE命令) 之前使用WREN命令設(shè)置寫使能鎖存器,WRITE命令將數(shù)據(jù)寫入 FRAM存儲單元陣列。WRITE操作碼、任意24位地址和8位寫入數(shù)據(jù)輸入到 SI。
下面這段代碼實(shí)現(xiàn)了向SPI設(shè)備發(fā)送寫入使能命令的功能。
這段代碼實(shí)現(xiàn)了向SPI設(shè)備同步寫入數(shù)據(jù)的功能。它先發(fā)送寫入使能命令,然后發(fā)送地址信息和數(shù)據(jù)。
下面這段代碼向 SPI設(shè)備中同步寫入數(shù)據(jù)的功能,將用戶空間的數(shù)據(jù)復(fù)制到設(shè)備的發(fā)送緩沖區(qū),并調(diào)用spidev_sync_write 函數(shù)將數(shù)據(jù)寫入SPI 設(shè)備。
2、應(yīng)用程序
向SPI設(shè)備寫數(shù)據(jù),調(diào)用lseek來改變寫入數(shù)據(jù)的位置,這樣就可以在整個(gè)SPI設(shè)備里寫數(shù)據(jù),如./writeframAPP /dev/pb85rs 0 forlinx
(0是要寫入的地址,forlinx是要寫入的內(nèi)容)。
從SPI設(shè)備讀數(shù)據(jù),調(diào)用lseek來改變讀取數(shù)據(jù)的位置,這樣就可以在整個(gè)SPI設(shè)備里讀數(shù)據(jù),如./readframAPP /dev/pb85rs 0
(0是要讀取數(shù)據(jù)的地址)
3、實(shí)際測試
(1)首先將fram.ko, readframAPP, writefram APP拷貝到OK3568-C開發(fā)板的任意文件夾中。
(2)用insmod加載fram.ko模塊,出現(xiàn)spi_probe success!說明驅(qū)動和設(shè)備樹匹配成功。
(3)在/dev/下看有沒有pb85rs設(shè)備。
(4)使用./writeframAPP /dev/pb85rs 1500 forlinx
向設(shè)備寫數(shù)據(jù),1500是地址,forlinx是要寫入的內(nèi)容。
(5)使用./readframAPP /dev/pb85rs 1500
(1500是要讀取數(shù)據(jù)的地址)
4、斷電測試
斷電一天后重新讀取PB85RS2MC的數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)仍然存在。驗(yàn)證了PB85RS2MC鐵電存儲芯片的斷電數(shù)據(jù)保留特性。
至此,我們就完成了在OK3568-C開發(fā)板上添加一個(gè)新的SPI鐵電存儲芯片的操作!
相關(guān)產(chǎn)品 >
-
FET3568-C核心板
RK3568性能強(qiáng)而穩(wěn) 國產(chǎn)芯|飛凌嵌入式RK3568系列核心板,采用瑞芯微國產(chǎn)高性能AI處理器RK3568設(shè)計(jì)生產(chǎn),RK3568兼具CPU、GPU、NPU、VPU于一身,RK3568 性能、性價(jià)比在同類產(chǎn)品中具有較高優(yōu)勢,RK3568處理器是一款定位中高端的通用型SoC, 飛凌RK3568核心板主要面向工業(yè)互聯(lián)網(wǎng)、HMI、NVR存儲、車載中控、工業(yè)網(wǎng)關(guān)等領(lǐng)域。目前RK3568系列已經(jīng)批量穩(wěn)定出貨
了解詳情 -
OK3568-C開發(fā)板
強(qiáng)而穩(wěn),國產(chǎn)芯,1Tops算力,多路高速接口|飛凌RK3568系列RK3568開發(fā)板基于國產(chǎn)工業(yè)級AI處理器RK3568四核64位Cortex-A55 處理器設(shè)計(jì)。RK3568作為國產(chǎn)化高性能處理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU達(dá)到1Tops,飛凌RK3568系列核心板提供瑞芯微RK3568規(guī)格書_datasheet_數(shù)據(jù)手冊_原理圖等,