找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1941|回復: 7
收起左側(cè)

關(guān)于SPI DMA的接收設(shè)備掉線疑問

[復制鏈接]
回帖獎勵 10 黑幣 回復本帖可獲得 2 黑幣獎勵! 每人限 1 次
ID:326261 發(fā)表于 2023-9-11 14:39 | 顯示全部樓層 |閱讀模式
如題,目前題主在做一個STM32的spi dma作flash芯片傳輸數(shù)據(jù),但是要檢測到flash是否在線
又因為要兼容各種flash芯片,不能采用讀取ID號來區(qū)分,只能使用檢測數(shù)據(jù)來區(qū)分了
但是看了資料,實在不理解如何使用STM32內(nèi)部寄存器區(qū)分是否接收到數(shù)據(jù)了

SPI的DMA傳輸流程我個人的理解是:
DMA通過讀取SPI_DR寄存器的值來獲取到DMA緩沖里面,但是他不會去區(qū)分DR的值是從哪來的,
是否來的合理,只是提取,提取到了就產(chǎn)生DMA完成中斷,然后把數(shù)據(jù)傳到內(nèi)存里。

問題:
1、我的對SPI的DMA流程是否正確?
2、有沒有寄存器可以檢測出來我已經(jīng)沒有flash芯片了,為什么還能接收到00或者FF的數(shù)據(jù)?
回復

使用道具 舉報

ID:771630 發(fā)表于 2023-9-11 20:54 | 顯示全部樓層
SPI不具有檢測設(shè)備是否在線的能力,他不像IIC有ACK,也不像UART有下降沿觸發(fā),所有時鐘信號由主機產(chǎn)生,主機只會在時鐘邊緣讀取引腳電平并儲存,如果引腳存在上下拉,則可能接收到ff或者00,如果是浮空的,則是隨機數(shù)。
回復

使用道具 舉報

ID:1088185 發(fā)表于 2023-9-11 21:09 | 顯示全部樓層
這跟DMA無關(guān), 是你對SPI的讀寫流程不太了解, 最好看看SPI的方塊圖,這比較容易理解
雙工的SPI其實是沒有只寫的, 它寫的同時必定是同時讀, 那怕你配置是只寫, 它還是讀了, 只不過是讀了就放棄了。 相反,SPI也沒有只讀的動作,讀的過程也是寫的過程, 所以沒有接收完成的標志位,因為它寫完就是讀完的意思。
回復

使用道具 舉報

ID:326261 發(fā)表于 2023-9-12 09:05 | 顯示全部樓層
XLinliY.Zhang 發(fā)表于 2023-9-11 20:54
SPI不具有檢測設(shè)備是否在線的能力,他不像IIC有ACK,也不像UART有下降沿觸發(fā),所有時鐘信號由主機產(chǎn)生,主 ...

感謝回答,還想問一下,如果要做一個檢測設(shè)備在線的機制,你的思路是怎樣的嗎?
比如我的思路:在指定的一個地址0x10,寫入一個數(shù)據(jù)0xAA,再讀出來是否一致,來判斷設(shè)備是否在線。
回復

使用道具 舉報

ID:326261 發(fā)表于 2023-9-12 09:11 | 顯示全部樓層
1600277881 發(fā)表于 2023-9-11 21:09
這跟DMA無關(guān), 是你對SPI的讀寫流程不太了解, 最好看看SPI的方塊圖,這比較容易理解
雙工的SPI其實是沒有 ...

非常感謝!看了一下時序圖,學習了。
按照內(nèi)部文檔邏輯所說,如果不用DMA的話,他會有一個接收緩沖區(qū)標志位,如果接收到數(shù)據(jù),這個位則置起,但是DMA這個不經(jīng)過SPI內(nèi)部緩沖區(qū),所以導致接收緩沖器是否為空的這個RXNE標志位沒有作用了,所以檢測不到我的主板是否接收到數(shù)據(jù)。
還想請教一下,如果是要做檢測設(shè)備是否在線,是否接收到數(shù)據(jù)的話,要怎么作這個判斷邏輯呢?
回復

使用道具 舉報

ID:1092816 發(fā)表于 2023-9-12 10:36 | 顯示全部樓層
如果不通過DMA傳輸數(shù)據(jù),正常,就是你DMA流程哪里沒設(shè)置到。要檢測flash芯片是否在線,定時讀取id
回復

使用道具 舉報

ID:326261 發(fā)表于 2023-9-12 11:15 | 顯示全部樓層
cjc1029 發(fā)表于 2023-9-12 10:36
如果不通過DMA傳輸數(shù)據(jù),正常,就是你DMA流程哪里沒設(shè)置到。要檢測flash芯片是否在線,定時讀取id

因為有的flash芯片是不能采取讀取ID號來判斷的,廠家沒有ID號查詢這個,所以查ID號暫不考慮。
回復

使用道具 舉報

ID:771630 發(fā)表于 2023-9-12 14:56 | 顯示全部樓層
工學院陳偉霆 發(fā)表于 2023-9-12 09:05
感謝回答,還想問一下,如果要做一個檢測設(shè)備在線的機制,你的思路是怎樣的嗎?
比如我的思路:在指定的 ...

從一個已知數(shù)據(jù)的地址讀取數(shù)據(jù),并判斷是否正確,例如芯片ID、某個值固定的寄存器、儲存進去的數(shù)據(jù)等
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表