欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機軟件SPI和硬件SPI讀寫SD卡,TF卡測試程序

  [復制鏈接]
ID:658665 發(fā)表于 2020-4-26 23:24 | 顯示全部樓層 |閱讀模式
軟件SPI和硬件SPI讀寫SD卡,TF卡測試程序
SD卡模塊和SD卡
0.png


軟件SPI讀寫SD卡程序
測試平臺:STC89C516和STC12C5A60S2
內(nèi)存卡大小:128MB和2GB
晶振:均為12MHz

硬件SPI讀寫SD卡程序
測試平臺:STC12C5A60S2
內(nèi)存卡大小:128MB和2GB
晶振:12MHz
(89C52沒有硬件SPI)


為了盡可能的不給后來者留坑,這些代碼我在發(fā)出來之前反復測試過,確保無誤,
還有就是關(guān)于SD卡程序的讀寫我在程序中寫的很清楚,這里不再贅述

單片機源程序如下:
  1. #include "public.h"
  2. #include "SD.h"

  3. //測試平臺:STC89C516和STC12C5A60S2
  4. //內(nèi)存卡大小:128MB和2GB
  5. //晶振:均為12MHz

  6. void main()
  7. {
  8.         unsigned int i;

  9.         SD_init();//SD卡初始化
  10.        
  11.         for(i=0;i<512;++i) BUFFER_DATA[i]=0x7F;
  12.         MCU_write_SD_512Byte(960,512);//MCU向SD卡寫入數(shù)據(jù),一次最多512字節(jié)(扇區(qū),數(shù)據(jù)長度(最大為512,建議填512))
  13.        
  14.         MCU_read_SD_512Byte(960,512);//MCU向SD卡讀取數(shù)據(jù),一次最多512字節(jié)(扇區(qū),數(shù)據(jù)長度(最大為512,建議填512))
  15.         P0=BUFFER_DATA[0];
  16.        
  17.         while(1);
  18. }

  19. /*
  20.         unsigned int i;
  21.        
  22.         SD_init();//SD卡初始化
  23.        
  24.         {
  25.                 在使用SD卡模塊前,先初始化SD卡
  26.         }
  27.        
  28.         for(i=0;i<512;++i) BUFFER_DATA[i]=0x7F;
  29.         MCU_write_SD_512Byte(960,512);//MCU向SD卡寫入數(shù)據(jù),一次最多512字節(jié)(扇區(qū),數(shù)據(jù)長度(最大為512,建議填512))
  30.        
  31.         {
  32.                 將數(shù)據(jù)寫入到SD卡:
  33.                 先將數(shù)據(jù)寫入到數(shù)據(jù)緩沖數(shù)組BUFFER_DATA中(這里的數(shù)據(jù)我全部都寫0x7F),
  34.                 然后運行MCU_write_SD_512Byte(960,512);
  35.                 960為SD卡的扇區(qū),表示將數(shù)據(jù)寫入到SD卡的960扇區(qū),512為一次性寫入的數(shù)據(jù)大小,為512字節(jié),建議填512字節(jié),
  36.                 因為1個扇區(qū)的大小為512字節(jié)
  37.         }
  38.        
  39.         MCU_read_SD_512Byte(960,512);//MCU向SD卡讀取數(shù)據(jù),一次最多512字節(jié)(扇區(qū),數(shù)據(jù)長度(最大為512,建議填512))
  40.         P0=BUFFER_DATA[0];
  41.        
  42.         {
  43.                 從SD卡讀取數(shù)據(jù):
  44.                 先運行MCU_read_SD_512Byte(960,512);
  45.                 這里的960為你要讀的SD扇區(qū),512位一次性讀取的數(shù)據(jù)大小,為512字節(jié),建議填512字節(jié),因為1個扇區(qū)的大小為512字節(jié)
  46.                 完成后數(shù)據(jù)存放在數(shù)據(jù)緩沖數(shù)組BUFFER_DATA中
  47.                
  48.                 因為沒有現(xiàn)象的話不好判斷SD卡讀寫是否成功,所以把P0BUFFER_DATA[0]賦給P0,P0接LED燈,就可以看見現(xiàn)象了
  49.         }

  50.         {
  51.                 注意:將程序下載到開發(fā)板后可能會出現(xiàn)P0口顯示的數(shù)據(jù)和SD卡寫入數(shù)據(jù)不一致的情況
  52.                 這時,
  53.                         要將開發(fā)板和SD卡模塊斷電
  54.                         要將開發(fā)板和SD卡模塊斷電
  55.                         要將開發(fā)板和SD卡模塊斷電
  56.                         不是復位
  57.                         不是復位
  58.                         不是復位
  59.                 將開發(fā)板斷電后再上電,就可以看見現(xiàn)象了
  60.                 如果還不成功,
  61.                         檢查連線是否正確
  62.                         檢查連線是否正確
  63.                         檢查連線是否正確
  64.                 或嘗試插拔SD卡
  65.                
  66.                 SD卡讀寫成功后,可以修改扇區(qū)和SD的寫入數(shù)據(jù)多實驗幾次,確保萬無一失
  67.         }
  68. */
復制代碼

所有資料51hei提供下載:
單片機讀寫SD卡.rar (78.27 KB, 下載次數(shù): 464)

沒有積分的可從這里下載
鏈接:
游客,本帖隱藏的內(nèi)容需要積分高于 1 才可瀏覽,您當前積分為 0



評分

參與人數(shù) 4黑幣 +65 收起 理由
小當 + 5
13487086265 + 5 絕世好帖!
1679079206 + 5 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:276663 發(fā)表于 2020-4-27 08:57 | 顯示全部樓層
多謝分享,這些都是對新手最大的幫助。
回復

使用道具 舉報

ID:586074 發(fā)表于 2020-5-4 11:02 | 顯示全部樓層
標記一個,有時間再來詳細拜讀。謝謝樓主分享
回復

使用道具 舉報

ID:259035 發(fā)表于 2020-10-14 12:21 | 顯示全部樓層
多謝分享,這些都是對新手很好的。。贊
回復

使用道具 舉報

ID:834302 發(fā)表于 2020-10-25 14:11 | 顯示全部樓層
感謝分享,正在研究SD卡
回復

使用道具 舉報

ID:382699 發(fā)表于 2020-11-14 11:40 | 顯示全部樓層
非常感謝,終于找到一個可以用的程序了
回復

使用道具 舉報

ID:705471 發(fā)表于 2020-11-17 21:55 | 顯示全部樓層
正用上,參考了。謝謝。
回復

使用道具 舉報

ID:495990 發(fā)表于 2021-2-22 22:49 | 顯示全部樓層
樓主: "SD.h"頭文件可以下載還是需要自己制作呢?
回復

使用道具 舉報

ID:658665 發(fā)表于 2021-2-23 09:51 | 顯示全部樓層
SJ-123 發(fā)表于 2021-2-22 22:49
樓主: "SD.h"頭文件可以下載還是需要自己制作呢?

單片機讀寫SD卡.rar

78.27 KB, 下載次數(shù): 16, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:718536 發(fā)表于 2021-6-22 13:10 | 顯示全部樓層
感謝大佬的無私分享。感謝!愛你喔
回復

使用道具 舉報

ID:908826 發(fā)表于 2021-9-5 10:17 | 顯示全部樓層
我有一點 想問一下,比如這個扇區(qū)寫滿512,再寫下一個的時候時候自動進入下一個扇區(qū)還是覆蓋本扇區(qū)呢?
回復

使用道具 舉報

ID:983266 發(fā)表于 2021-11-21 23:21 | 顯示全部樓層
13205495918 發(fā)表于 2021-9-5 10:17
我有一點 想問一下,比如這個扇區(qū)寫滿512,再寫下一個的時候時候自動進入下一個扇區(qū)還是覆蓋本扇區(qū)呢?

你搞定TF卡操作了嗎?
回復

使用道具 舉報

ID:983266 發(fā)表于 2021-11-22 00:09 | 顯示全部樓層
        while(response)
        {
                SD_CS=1;
                SPI_write_Byte(0xFF);
                SD_CS=0;
                MCU_write_SD_command(0x01,0x00FFC000,0xFF);
                response=SD_response();
        }
我測試了新買的8G,32G內(nèi)存卡,都卡在了這個地方,無法初始化,但是用之前的32g的,1g,2g的都正常,不知道是哪里問題,新的卡不支持SPI模式嗎?
回復

使用道具 舉報

ID:513213 發(fā)表于 2021-11-22 14:06 | 顯示全部樓層
saint_lee1986 發(fā)表于 2021-11-22 00:09
while(response)
        {
                SD_CS=1;

時格式化的格式不一樣嗎?
回復

使用道具 舉報

ID:983266 發(fā)表于 2021-11-24 07:21 | 顯示全部樓層
lsh04 發(fā)表于 2021-11-22 14:06
時格式化的格式不一樣嗎?

還有個問題請教你一下,關(guān)于讀寫時,切換block問題,0x58,0x00,0x00,0x00,0x00,0xff,這是寫第一個block地址,如果要讀下一個,是要將地址改為:0x58,0x00,0x00,0x02,0x00,0xff?是這樣嗎
回復

使用道具 舉報

ID:972156 發(fā)表于 2021-11-24 15:45 | 顯示全部樓層
太棒了!找了好久終于找到了!
回復

使用道具 舉報

ID:830688 發(fā)表于 2022-2-25 17:19 | 顯示全部樓層
你好,感謝分享。你那個“檢測SD卡響應(yīng)”的函數(shù)不怎么管用,改成如下好多了。
//檢測SD卡的響應(yīng)————返回0xFF,沒檢測到;反之檢測到
u8 SD_response()
{
        u8 i;
        u8 response = 0xFF;

        for(i=0;i<9;++i)
        {
                response=SPI_read_Byte();
                if((response==0x00)||(response==0x01))
                        return response;
        }
        return response;
}
回復

使用道具 舉報

ID:961457 發(fā)表于 2022-6-3 23:16 | 顯示全部樓層
謝謝樓主,很有幫助
回復

使用道具 舉報

ID:1039438 發(fā)表于 2023-2-28 10:20 | 顯示全部樓層
我使用了stc32g12k128,修改了頭文件包涵和相應(yīng)的管腳定義,用軟件模擬spi方式一次成功讀寫。用硬件spi方式反復試都不成功,不知是什么問題。
回復

使用道具 舉報

ID:1039438 發(fā)表于 2023-2-28 10:40 | 顯示全部樓層
使用了spi管腳選擇,試過各種頻率,都不行。讀出來都是0.
回復

使用道具 舉報

ID:1039438 發(fā)表于 2023-2-28 11:08 | 顯示全部樓層
有沒有人試過在程序中加一個清零語句?
void main()
{
        unsigned int i;

        SD_init();//SD卡初始化
        
        for(i=0;i<512;++i) BUFFER_DATA[i ]=0x7F;
        MCU_write_SD_512Byte(960,512);//MCU向SD卡寫入數(shù)據(jù),一次最多512字節(jié)(扇區(qū),數(shù)據(jù)長度(最大為512,建議填512))
                for(i=0;i<512;++i) BUFFER_DATA[i ]=0x00;//緩沖區(qū)數(shù)據(jù)清零

        MCU_read_SD_512Byte(960,512);//MCU向SD卡讀取數(shù)據(jù),一次最多512字節(jié)(扇區(qū),數(shù)據(jù)長度(最大為512,建議填512))
        P0=BUFFER_DATA[0];
        
        while(1);
}
我加了清零語句后發(fā)現(xiàn)我的讀語句沒起作用。用winhex打開tf卡看內(nèi)存,960扇區(qū)是空白的,沒有被寫入內(nèi)容,全是0
內(nèi)存圖.png
回復

使用道具 舉報

ID:229375 發(fā)表于 2023-6-3 11:53 | 顯示全部樓層
感謝樓主分享!
今天試了用 硬件SPI移植到STC8F2K16S2上 ,試了128M和2G的內(nèi)存卡,可以正常寫入,4G則失敗了

回復

使用道具 舉報

ID:1040201 發(fā)表于 2023-8-18 17:49 | 顯示全部樓層
非常感謝,TF卡    正是我想學的
回復

使用道具 舉報

ID:1063561 發(fā)表于 2023-8-22 08:58 | 顯示全部樓層
非常感謝, 正是想學的
回復

使用道具 舉報

ID:819198 發(fā)表于 2023-8-31 18:21 | 顯示全部樓層
標記一個,有時間再來詳細拜讀。謝謝樓主分享
回復

使用道具 舉報

ID:57657 發(fā)表于 2023-8-31 21:19 | 顯示全部樓層
麗江春水 發(fā)表于 2023-2-28 10:20
我使用了stc32g12k128,修改了頭文件包涵和相應(yīng)的管腳定義,用軟件模擬spi方式一次成功讀寫。用硬件spi方式 ...

具有硬件SPI功能的IO口是固定的,不同型號都可能不一樣。
有問題是寄存器配置有誤或中斷問題,使用邏輯分析儀檢查時序。
回復

使用道具 舉報

ID:1030215 發(fā)表于 2023-9-20 20:08 | 顯示全部樓層
感謝大佬的無私分享。感謝!愛你喔
回復

使用道具 舉報

ID:230500 發(fā)表于 2023-10-1 18:59 | 顯示全部樓層
值得學習! Mark一下!
回復

使用道具 舉報

ID:92781 發(fā)表于 2023-11-19 08:20 來自觸屏版 | 顯示全部樓層
你就是我的神,多謝無私奉獻
回復

使用道具 舉報

ID:17521 發(fā)表于 2024-4-1 11:12 | 顯示全部樓層
謝謝大神分享代碼
回復

使用道具 舉報

ID:1112603 發(fā)表于 2024-4-7 09:48 | 顯示全部樓層
謝謝分享!新手學習很需要這樣的帖子。
回復

使用道具 舉報

ID:79094 發(fā)表于 2024-5-5 21:35 | 顯示全部樓層
//SD卡初始化
u8 SD_init()
{
        u8 i;
        u8 response=0x01;
       
        SD_CS=1;
        for(i=0;i<10;++i) SPI_write_Byte(0xFF);
        SD_CS=0;
       
        MCU_write_SD_command(0x00,0x00000000,0x95);//發(fā)送命令0將MMC置于SPI模式

        response=SD_response();

        if(response!=0x01) return 0;
        while(response)
        {
                SD_CS=1;
                SPI_write_Byte(0xFF);
                SD_CS=0;
                MCU_write_SD_command(0x01,0x00FFC000,0xFF);
                response=SD_response();
        }
        SD_CS=1;
        SPI_write_Byte(0xFF);
        樓主 cmd1 是mmc 初始化  我用sd 卡cmd1 命令回應(yīng)不正確  好坑啊  有sd 的沒 給新人學習下把 搞了一個多星期啊  我好想哭啊
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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