<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RK3568筆記分享——如何掛載SPI FRAM鐵電存儲芯片

飛凌嵌入式 ? 2023-09-22 08:01 ? 次閱讀

對于做快速存儲采集數據類產品的用戶來說,在處理突發掉電情況時需要保存現有數據并避免數據丟失,這種情況下有很多種解決方案,鐵電存儲器(FRAM) 就是個很好的選擇。FRAM是一種具有快速寫入速度的非易失性存儲器,既可以進行非易失性數據存儲,又可以像RAM一樣操作。

本文將借助飛凌嵌入式OK3568-C開發板來為大家介紹一種采用FRAM的方案——使用SPI0掛載PB85RS2MC (FRAM) 芯片。本文所描述的驅動文件和應用文件,可聯系飛凌嵌入式的技術支持獲取。

wKgaomUNLLWAGEVUAAswXLOa2P8057.png

修改思路——

我們要添加一個SPI設備,需要進行如下操作:在設備樹中添加描述→設備樹描述中對應設備驅動→設備驅動添加到內核。

修改結果——

修改 OK3568-linux-source/kernel/arch/arm64/boot/dts/rockchip/OK3568-C-common.dtsi

修改如下:

wKgZomUNLLSANdvaAABPzdVFgIY691.png

接下來筆者為大家介紹一下適配的過程。

1驅動程序

我們在menuconfig中搜索fm25、pb85等比較常用的FRAM字眼,發現并沒有類似的驅動程序,這時就需要手寫或者移植一個驅動程序。在搜遍各大網站之后找到了一個W25Q64的驅動,對比了一下PB85RS2MC的各種操作碼以后,發現兩者的操作碼大差不差,因此就決定將W25Q64的驅動移植過來。根據PB85RS2MC芯片手冊中敘述,各種操作碼為:

wKgaomUNLLSALoEvAABtDv-Auc8420.pngwKgaomUNLLSAZXBHAACtEB3NdO8457.png

因此,在驅動程序中宏定義以下操作碼,以便在接下來的驅動程序中使用:

wKgaomUNLLSAEDX6AABfbutbbhc581.png

首先要在驅動程序中進行初始化函數和退出函數,也就是spidev_init和spidev_exit,init函數里就是進行字符設備的初始化,注冊等的操作,exit函數就是要把我們注冊的東西在退出時都釋放掉,再者就是驅動程序和設備樹匹配,匹配是通過compatible屬性值匹配的,這里我們一定要和設備樹中的compatible屬性值一致,否則會匹配不成功。驅動程序中.compatible值如下圖所示。

wKgZomUNLLSADSg2AAAn3A8N7PU443.png

驅動和設備樹匹配成功以后就要執行probe函數,這里probe函數執行了一些初始化和注冊主次設備號的操作。我們可以通過是否打印spi_probesuccess!來判斷驅動程序,是否和設備樹匹配成功。

wKgaomUNLLWAE5y9AAEy-kKXQ6A161.png

從PB85RS2MC芯片手冊中看讀的條件,讀取FRAM存儲單元的數據,需要READ的操作碼,任意24位地址輸入到SI。第一個spi_transfer 結構體用于發送命令cmd 到SPI設備,在讀取數據之前準備設備,第二個是發送地址到SPI設備,第三個是接收從設備讀取的數據。

wKgZomUNLLWAW-zNAAEMDpORhwQ830.png

這段代碼實現了從 SPI設備中同步讀取數據,并將數據復制到用戶空間的功能。

wKgZomUNLLWAdGWzAADO54z3BBY537.png

從PB85RS2MC芯片手冊中看寫的條件,WREN命令用于設置寫使能鎖存器。需要在寫操作(WRITE命令)之前使用WREN命令設置寫使能鎖存器,WRITE命令將數據寫入 FRAM存儲單元陣列。WRITE操作碼、任意24位地址和8位寫入數據輸入到 SI。

下面這段代碼實現了向SPI設備發送寫入使能命令的功能。

wKgZomUNLLaAZW4qAACHMMXcNdA300.png

這段代碼實現了向SPI設備同步寫入數據的功能。它先發送寫入使能命令,然后發送地址信息和數據。

wKgZomUNLLaAV59NAAEcFHGFPcA629.png

下面這段代碼向 SPI設備中同步寫入數據的功能,將用戶空間的數據復制到設備的發送緩沖區,并調用spidev_sync_write 函數將數據寫入SPI 設備。

wKgaomUNLLWAKSgqAAC3OevAyvI947.png

2應用程序

向SPI設備寫數據,調用lseek來改變寫入數據的位置,這樣就可以在整個SPI設備里寫數據,如./writeframAPP /dev/pb85rs 0 forlinx

0是要寫入的地址,forlinx是要寫入的內容)。

wKgZomUNLLWAH16AAABAno9ueFo543.png

從SPI設備讀數據,調用lseek來改變讀取數據的位置,這樣就可以在整個SPI設備里讀數據,如./readframAPP /dev/pb85rs 0

0是要讀取數據的地址)

wKgaomUNLLWAYI3SAACa-WUUmYY162.png

3實際測試

(1)首先將fram.ko,readframAPP, writefram APP拷貝到OK3568-C開發板的任意文件夾中。

wKgZomUNLLaAFlqKAAAHj-gd_2M770.png

(2)用insmod加載fram.ko模塊,出現spi_probesuccess!說明驅動和設備樹匹配成功。

wKgaomUNLLaAO9AAAAAQhaNT3o0389.png

(3)在/dev/下看有沒有pb85rs設備。

wKgZomUNLLaAPZrEAABAHQ86q0g442.png

(4)使用./writeframAPP /dev/pb85rs 1500 forlinx

向設備寫數據,1500是地址,forlinx是要寫入的內容。

wKgaomUNLLaAaw_yAAAHhKDczY0550.png

(5)使用./readframAPP /dev/pb85rs 1500

1500是要讀取數據的地址)

wKgaomUNLLaARx76AAAH51tqjbc199.png

4斷電測試

斷電一天后重新讀取PB85RS2MC的數據,發現數據仍然存在。驗證了PB85RS2MC鐵電存儲芯片的斷電數據保留特性。

wKgaomUNLLaARky6AAAH3EAxK3A543.png

至此,我們就完成了在OK3568-C開發板上添加一個新的SPI鐵電存儲芯片的操作!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    447

    文章

    48292

    瀏覽量

    411488
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1625

    瀏覽量

    89891
  • 嵌入式開發
    +關注

    關注

    18

    文章

    986

    瀏覽量

    47090
  • fram
    +關注

    關注

    2

    文章

    267

    瀏覽量

    79143
  • RK3568
    +關注

    關注

    4

    文章

    445

    瀏覽量

    4357
收藏 人收藏

    評論

    相關推薦

    rv1126和rk3568對比

    rv1126和rk3568對比: 瑞芯微智能視覺芯片RV1126是瑞芯微新一代智能視覺芯片,基于四核ARM Cortex-A7內核,內置2T算力 NPU,支持4K30FPS H.264/H.265
    的頭像 發表于 01-23 18:05 ?7432次閱讀
    rv1126和<b class='flag-5'>rk3568</b>對比

    rk3568和3588對比

    在現代高科技領域中,芯片的選擇對于軟件和硬件開發的成功至關重要。而在市場上最具影響力的芯片制造商之一,在旗下推出了RK3568和3588芯片。這兩款
    的頭像 發表于 12-27 15:57 ?6590次閱讀

    如何掛載RK3568SPI FRAM存儲芯片

    的非易失性存儲器,既可以進行非易失性數據存儲,又可以像RAM一樣操作。 本文將借助飛凌嵌入式OK3568-C開發板來為大家介紹一種采用FRAM的方案——使用
    發表于 10-19 09:28

    rk3568是什么架構的?

    RK3568是什么架構的? 中國領先的無晶圓廠半導體公司Rockchip Electronics推出了一款專門為人工智能應用設計的新型片上系統(SoC)。這種新型SoC被稱為RK3568,構建
    的頭像 發表于 08-15 17:25 ?1992次閱讀

    rk3568有多少引腳?

    rk3568有多少引腳? 首先,讓我們來了解一下什么是rk3568。rk3568是由瑞芯微推出的一款高性能、低功耗的嵌入式處理器,它是rk3566的升級版本,采用了更加先進的技術和架構
    的頭像 發表于 08-15 17:25 ?1137次閱讀

    RK3568與STIM的差異

    RK3568與STIM的差異 RK3568和STIM是兩款不同的處理器,都屬于ARM架構的芯片。RK3568是瑞芯微推出的一款低功耗高性能的芯片
    的頭像 發表于 08-15 17:25 ?655次閱讀

    RK35683568J的區別

    RK35683568J的區別 在當前處理器市場中,以小而美形象聞名的瑞克微電子旗下產品RK3568/J也引起了廣泛關注,其中RK35683568
    的頭像 發表于 08-15 17:25 ?5868次閱讀

    RK3568與J4125那個CPU好?

    等應用領域。而J4125是Intel公司的一款筆記本處理器,主要用于輕薄本、一體機等設備上。簡單來說,RK3568是一款面向低功耗、低成本、嵌入式應用場景的處理器,而J4125則是一款面向高性能、筆記本電腦等電腦設備使用的處理器
    的頭像 發表于 08-15 17:25 ?2843次閱讀

    RK3568RK3399參數對比

    RK3568RK3399參數對比 隨著現代科技的不斷發展,芯片技術一直是人們關注的熱門話題之一。隨著人們對高性能、高效能芯片的需求越來越大,許多
    的頭像 發表于 08-15 17:25 ?3188次閱讀

    RK3568RK3588的區別

    RK3568RK3588的區別 RK3568RK3588是瑞芯微推出的兩款高性能芯片,兩款芯片
    的頭像 發表于 08-15 17:25 ?7628次閱讀

    RK3568RK3566的區別

    RK3568RK3566的區別 RK3568RK3566是兩種不同的芯片,都是由Rockchip公司推出的。它們都是面向高性能應用市場的
    的頭像 發表于 08-15 17:25 ?1.2w次閱讀

    rk3568和1619b那個更好?

    rk3568和1619b那個更好? 在當前市場上,RK3568和1619B這兩個芯片都是比較受歡迎的選擇。不過,如果要對比兩者的優劣,還需要從多個方面來進行考慮。下面,我們來分別看看RK356
    的頭像 發表于 08-15 17:05 ?4563次閱讀

    rk3568rk3399的區別

    rk3568rk3399的區別 隨著人工智能、物聯網和5G等技術的不斷發展,CPU芯片的需求越來越高。而在所有的CPU芯片中,Rockchip的產品備受矚目。作為一家集成電路設計廠商
    的頭像 發表于 08-15 17:04 ?2599次閱讀

    瑞芯微RK3568核心板PET_RK3568_CORE簡述

    瑞芯微RK3568核心板PET_RK3568_CORE簡述
    的頭像 發表于 08-08 11:44 ?2392次閱讀
    瑞芯微<b class='flag-5'>RK3568</b>核心板PET_<b class='flag-5'>RK3568</b>_CORE簡述

    瑞芯微RK3568主板開發板PET_RK3568_P01簡述

    瑞芯微RK3568主板開發板PET_RK3568_P01簡述
    的頭像 發表于 08-08 11:41 ?2005次閱讀
    瑞芯微<b class='flag-5'>RK3568</b>主板開發板PET_<b class='flag-5'>RK3568</b>_P01簡述
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>