2017-06-13 97 views
-1

我有一個Arduino或Teensy的項目,我需要從一個SD卡的二進制文件「字節」buf=file.read()不斷讀取字節,並通過端口操作進行輸出(PORTD = buf,...或PORTD = file.read()循環)在一些穩定的頻率。微控制器SD卡

我讀過,因爲SD卡的延遲,file.read()命令不會每次同時執行,所以輸出頻率不穩定。當我以一個循環讀取文件直到結束並打開文件時,是否發生這種延遲?

如果是這樣,另一種解決方案是從SD卡讀取每個512字節,並藉助struct 將它們存儲到buf陣列中。現在的問題是,每當我讀取512個字節時,我必須等待那些來自SD卡讀取延遲。是否有可能創建兩個512字節的緩衝區陣列 - >填充第一個 - >開始端口操作,使用頻率爲10或20 Khz或更高的定時器中斷內的第一個陣列,所以輸出始終具有穩定的頻率而在另一個循環中,我嘗試填充另一個數組?我的意思是有可能中斷沒有問題的「file.read(buf, size of(512))」命令嗎?

如果是這樣,我該如何處理平滑的數據速率和穩定的頻率?

我相信單片機音頻播放器也會出現同樣的問題。他們從SD卡播放wav文件。請幫幫我。提前致謝!

+1

您沒有提及您使用的是哪個確切的部分,因此沒有人知道可用於執行您的任務的功能(例如SRAM,中斷,I/O)。單獨的Arduino系列涵蓋了很多功能。拿出數據表並且具體,請,或者沒有人能幫助。 – TomServo

回答

0

我還沒有編寫代碼,所以要說清楚,假設我有一個13位的SD卡模塊,帶有可用的204800字節的SRAM緩衝區,這意味着我可以使用400個緩衝區從SD卡讀取每個塊的512字節。

然後我做一個定時器中斷,它正在運行(例如在50KHz)並且逐字節地同時推出到8個引腳(任何一個端口可以用於PORT操作)。同時,是否可以在中斷外的可用時間內從SD卡中讀取新的數據塊,以便總是有可用的字節而不是等待SD卡?

簡而言之,當一個讀命令在某個時候開始時,它將被一個定時器中斷函數所中斷,以推出該字節,然後返回到原來的位置。這可能嗎?我認爲麥克風音頻播放器在兩個緩衝區中使用該邏輯,一個被推出(DAC值),而另一個在第一個充滿之前被填滿。這就是爲什麼44.4KHz是最大8位wav播放的原因,所以沒有任何緩衝器下溢,導致輸出頻率受到干擾。謝謝!