曰本美女∴一区二区特级A级黄色大片, 国产亚洲精品美女久久久久久2025, 页岩实心砖-高密市宏伟建材有限公司, 午夜小视频在线观看欧美日韩手机在线,国产人妻奶水一区二区,国产玉足,妺妺窝人体色WWW网站孕妇,色综合天天综合网中文伊,成人在线麻豆网观看

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

基于RK3576開發(fā)板的SPI使用說明

ljx2016 ? 來源:ljx2016 ? 作者:ljx2016 ? 2025-05-07 10:31 ? 次閱讀

1. SPI簡介

SPI是串行外設接口(Serial Peripheral Interface)的縮寫,是 Motorola 公司推出的一種同步串行接口技術,是一種高速、全雙工、同步的通信總線在用戶空間的應用程序中,完全可以不必理會SPI協(xié)議的詳細規(guī)定。只需要按照驅動層提供給我們的操作SPI外設的操作接口函數(shù)就可以像操作linux中其他普通設備文件那樣輕松的操作SPI外設了。

EASY EAI Orin-Nano的SPI接口分布如下圖所示:

wKgZPGgaxjeAUk7QABFYhIYTvmU402.jpg

1.1 SPI參數(shù)配置解析

設備文件格式:/dev/spidev(bus.select)

bus:代表SPI總線號,即一組SCLK、MOSI、MISO

select:代表SPI設備號,同一條總線上用不同的片選信號區(qū)分:CSN0、CSN1等

以Orin-Nano默認SPI資源為例:啟用SPI功能后,會出現(xiàn)下面4個設備節(jié)點(即有兩條總線,四個設備)。

/dev/spidev0.0

/dev/spidev0.1

/dev/spidev3.0

/dev/spidev3.1

SPI通信有4種不同的模式,不同的從設備在出廠時配置模式已經(jīng)固定,這是不能改變的,但通信雙方設備必須工作在同一模式下,所以可以對主設備的SPI模式進行配置,通過CPOL(時鐘極性)和CPHA(時鐘相位)來控制主設備的通信模式。

模式 CPOL CPHA
Mode0 0 0
Mode1 0 1
Mode2 1 0
Mode3 1 1

時鐘極性CPOL是用來配置SCLK電平的有效態(tài)的;

時鐘相位CPHA是用來配置數(shù)據(jù)采樣是發(fā)生在第幾個邊沿的。

CPOL=0表示當SCLK=0時處于空閑態(tài),所以SCLK處于高電平時有效;

CPOL=1表示當SCLK=1時處于空閑態(tài),所以SCLK處于低電平時有效;

CPHA=0表示數(shù)據(jù)采樣是在第1個邊沿,數(shù)據(jù)發(fā)送在第2個邊沿;

CPHA=1表示數(shù)據(jù)采樣是在第2個邊沿,數(shù)據(jù)發(fā)送在第1個邊沿;

【*】SPI主模塊和與之通信的外設通信時,兩者的時鐘相位和極性應該保持一致。

其余的參數(shù)如:speed:通信的比特率,delay:設置通信的時間延遲,bits通信所占的位數(shù)。

1.2 硬件連接

wKgZO2gaxjeAWeztAADdNgPRzl4704.png

本示例采用RFID讀卡模塊:RC522進行輔助演示。

RC522模塊與EASY EAI Orin-Nano的接線原理圖如下所示:

wKgZPGgaxjeAa6sbAACquRy1UWw705.png

2. 快速上手

2.1 例程源碼下載

到【百度網(wǎng)盤】上下載相關的單例程序:

鏈接:https://pan.baidu.com/s/1RXHMGpmGSEfFy0rb1VkXSg?pwd=1234

提取碼: 1234

比如在windows環(huán)境中,就把單例程序下載到:此電腦D:BaiduNetdisk (無規(guī)定,用戶可自主選擇),如下圖所示。

wKgZO2gaxjiAR2CVAACzgnRALP8807.png

然后把例程【復制粘貼】到nfs掛載目錄中。(不清楚目錄如何構建的,可以參考《入門指南/開發(fā)環(huán)境準備/nfs服務搭建與掛載》)

wKgZPGgaxjmAE0x_AAEB5SlMxus521.png

2.2 例程編譯&運行

通過adb shell進入開發(fā)板環(huán)境(不清楚如何通過adb進行調試,可以參考《入門指南/開發(fā)板調試方式介紹/adb調試》),執(zhí)行下方命令定位到demo目錄,并且執(zhí)行編譯操作。

cd /home/orin-nano/Desktop/nfs/07_SPI/
./build.sh
wKgZO2gaxjmAMO7yAAIKJYzTiMw358.png

此處會根據(jù)源碼輸出3個示例程序:test-rfid、test-fram、test-spidev。本文檔用到的輔助示例是test-rfid。其它示例用在別的應用場景里,此處的代碼僅供參考。

運行例程命令如下所示:

sudo ./Release/test-rfid

執(zhí)行效果如下所示。

wKgZPGgaxjmANwBiAAAlIUVkWuY032.png

API的詳細說明,以及API的調用(本例程源碼),詳細信息見下方說明。

3. RFID讀取ID例程

RFID例程源碼位于:

07_SPI/rfid.c。

07_SPI/dev/rc522.c。

07_SPI/include/rc522.h。

利用了RC522芯片進行實現(xiàn)及講解,操作流程如下。

wKgZO2gaxjqAGrCoAAD1T9GTTKA347.png

參考例程如下所示。

static unsigned char flag = 0;
static unsigned char bits = 8;
static unsigned int speed = 100000;
static uint16_t delay = 0;
unsigned char card_rev_buf[16]  = { 0 };
/* 
    *扇區(qū)密碼:A,扇區(qū)數(shù):16,每個扇區(qū)
    *密碼字節(jié)數(shù):16Byte
*/
unsigned char sector_key_a[16][16];
unsigned char data_buf[16] = 
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10}; 
int main (int argc, char **argv) {
    memset(data_buf, 0x00, sizeof data_buf);
    int status = MI_ERR;
    int numAtempt = 1;
    int fd = spi_init(dev_spi_bus, dev_spi_select, mode, bits,  speed,  delay);
    rfid_init(dev_spi_bus ,dev_spi_select , fd);   
    flag = MI_GET_ID;
    while(1)
    {
        while(rfid_request(PICC_REQIDL, &card_rev_buf[0]) != MI_OK && numAtempt-- >= 0) {
            usleep(500);
        }
        if(rfid_anticoll(&card_rev_buf[2]) == MI_OK) {
            status = rfid_select(&card_rev_buf[2]);
            if(status != MI_ERR) {
                if(flag == MI_GET_ID) {
                    printf("Card ID:%02x%02x%02x%02xn", card_rev_buf[2], card_rev_buf[3],card_rev_buf[4], card_rev_buf[5]);
                } else if (flag == MI_READ) {
                    memset(sector_key_a, 0xff, 256);
                    memset(data_buf, 0x00, sizeof data_buf);
                    status = rfid_auth_state(PICC_AUTHENT1A, addr, sector_key_a[addr/4], &card_rev_buf[2]);
                    if(status == MI_OK) {
                        status = rfid_read(addr, data_buf);
                        if(status == MI_OK) {
                        print_buff(data_buf, 16);
                        }
                    } else {
                        printf("Error reading");
                        close(fd);
                        exit(1);
                    }
                } else if (flag == MI_WRITE) {
                    memset(sector_key_a, 0xff, 256);
                    if(addr == 0 || addr % 4 == 3) {
                        close(fd);
                        exit(1);
                    }
                    status = rfid_auth_state(PICC_AUTHENT1A, addr,  sector_key_a[addr/4], &card_rev_buf[2]);
                    if(status == MI_OK) {
                        status = rfid_write(addr, data_buf);
                        if(status != MI_OK) {
                            printf("rfid write failure!n");
                            close(fd);
                            exit(1);
                        }    
                        } else {
                            printf("Error writing");
                            close(fd);
                            exit(1);
                        }
                } else {
                    printf("Not implementedn");
                }
                status = rfid_halt();
                if(status != MI_OK)  {
                    //printf ("rfid halt failure! [ERROR %d]n", status);
                }
            } else {
                // printf("Nonen");
            }
        } else {
            // printf("Nonen");
        }
    }
    spi_exit(dev_spi_bus , dev_spi_select);
    return 0;
} /* ----- End of main() ----- */

此外,spi接口的鐵電存儲器通信源碼位于:

07_SPI/fram.c。

07_SPI/mb85rs64.c。

07_SPI/mb85rs64.h。

spi接口的讀寫通信源碼位于:

07_SPI/spidev_test.c。

4. 注意事項

RC522主要為輔助SPI的API使用說明,對于此模塊的資料及使用說明請?zhí)D:

www.xxx.com(官網(wǎng)的模塊網(wǎng)址)

審核編輯 黃宇

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

    關注

    17

    文章

    1756

    瀏覽量

    94308
  • 串行接口
    +關注

    關注

    3

    文章

    373

    瀏覽量

    43079
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5432

    瀏覽量

    101236
  • rk3576
    +關注

    關注

    1

    文章

    125

    瀏覽量

    497
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    基于RK3576開發(fā)板的WDT看門狗使用說明

    RK3576開發(fā)板的WDT使用說明
    的頭像 發(fā)表于 05-06 17:15 ?368次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的WDT看門狗<b class='flag-5'>使用說明</b>

    基于RK3576開發(fā)板的PCIE固態(tài)硬盤使用說明

    RK3576開發(fā)板的PICE固態(tài)硬盤使用方法
    的頭像 發(fā)表于 05-06 17:33 ?1065次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的PCIE固態(tài)硬盤<b class='flag-5'>使用說明</b>

    基于RK3576開發(fā)板的TF卡槽使用說明

    RK3576開發(fā)板使用TF卡槽
    的頭像 發(fā)表于 05-07 09:24 ?442次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的TF卡槽<b class='flag-5'>使用說明</b>

    基于RK3576開發(fā)板的PWN使用說明

    RK3576開發(fā)板使用PWN教程及Demo
    的頭像 發(fā)表于 05-07 14:07 ?1026次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的PWN<b class='flag-5'>使用說明</b>

    基于RK3576開發(fā)板的RTC使用說明

    文章主要展示RK3576開發(fā)板的RTC信息和快速上手例程
    的頭像 發(fā)表于 05-07 15:04 ?481次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的RTC<b class='flag-5'>使用說明</b>

    基于RK3576開發(fā)板的人臉識別算法

    RK3576開發(fā)板展示人臉識別算法例程和API說明
    的頭像 發(fā)表于 05-07 16:48 ?905次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的人臉識別算法

    新品體驗 | RK3576開發(fā)板

    RK3399、RK3566、RK3568、RK3588、RK3576等型號的核心與評估
    的頭像 發(fā)表于 11-01 08:08 ?1615次閱讀
    新品體驗 | <b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>

    米爾RK3576開發(fā)板特惠活動!

    近日,米爾電子發(fā)布基于瑞芯微RK3576核心開發(fā)板,RK3576作為國產(chǎn)熱門處理器,其高性能數(shù)據(jù)處理能力、領先的AI智能分析、強大的擴展性與兼容性受到廣大
    的頭像 發(fā)表于 11-12 01:00 ?640次閱讀
    米爾<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>特惠活動!

    敬請期待 | 迅為RK3576開發(fā)板即將發(fā)布

    敬請期待 | 迅為RK3576開發(fā)板即將發(fā)布
    的頭像 發(fā)表于 11-22 15:13 ?469次閱讀
    敬請期待 | 迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>即將發(fā)布

    迅為RK3576開發(fā)板核心與底板接口硬件介紹

    迅為RK3576開發(fā)板核心與底板接口硬件介紹
    的頭像 發(fā)表于 01-14 15:15 ?1119次閱讀
    迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>核心<b class='flag-5'>板</b>與底板接口硬件介紹

    迅為RK3576開發(fā)板Android?多屏顯示

    迅為RK3576開發(fā)板Android?多屏顯示
    的頭像 發(fā)表于 01-16 16:58 ?707次閱讀
    迅為<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>Android?多屏顯示

    基于RK3576開發(fā)板的MIPI-DSI使用

    MIPI DSI接口是由MIPI聯(lián)盟下的Display工作組指定的DSI(Display Serial Interface)的接口標準。rk3576開發(fā)板使用mipi-dsi教程
    的頭像 發(fā)表于 05-06 16:11 ?164次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的MIPI-DSI使用

    基于RK3576開發(fā)板的揚聲器和耳機使用說明

    RK3576開發(fā)板的揚聲器和耳機使用說明
    的頭像 發(fā)表于 05-06 16:36 ?110次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的揚聲器和耳機<b class='flag-5'>使用說明</b>

    基于RK3576開發(fā)板的HDMI-OUT使用說明

    RK3576開發(fā)板的HDMI-OUT使用說明
    的頭像 發(fā)表于 05-06 16:48 ?97次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的HDMI-OUT<b class='flag-5'>使用說明</b>

    基于RK3576開發(fā)板的人員檢測算法

    展示了RK3576開發(fā)板的人員檢測算法例程及API說明
    的頭像 發(fā)表于 05-07 17:33 ?124次閱讀
    基于<b class='flag-5'>RK3576</b><b class='flag-5'>開發(fā)板</b>的人員檢測算法