久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13298|回復: 30
收起左側

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

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


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

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


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

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

  3. //測試平臺:STC89C516和STC12C5A60S2
  4. //內存卡大小: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卡寫入數據,一次最多512字節(扇區,數據長度(最大為512,建議填512))
  13.        
  14.         MCU_read_SD_512Byte(960,512);//MCU向SD卡讀取數據,一次最多512字節(扇區,數據長度(最大為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卡寫入數據,一次最多512字節(扇區,數據長度(最大為512,建議填512))
  30.        
  31.         {
  32.                 將數據寫入到SD卡:
  33.                 先將數據寫入到數據緩沖數組BUFFER_DATA中(這里的數據我全部都寫0x7F),
  34.                 然后運行MCU_write_SD_512Byte(960,512);
  35.                 960為SD卡的扇區,表示將數據寫入到SD卡的960扇區,512為一次性寫入的數據大小,為512字節,建議填512字節,
  36.                 因為1個扇區的大小為512字節
  37.         }
  38.        
  39.         MCU_read_SD_512Byte(960,512);//MCU向SD卡讀取數據,一次最多512字節(扇區,數據長度(最大為512,建議填512))
  40.         P0=BUFFER_DATA[0];
  41.        
  42.         {
  43.                 從SD卡讀取數據:
  44.                 先運行MCU_read_SD_512Byte(960,512);
  45.                 這里的960為你要讀的SD扇區,512位一次性讀取的數據大小,為512字節,建議填512字節,因為1個扇區的大小為512字節
  46.                 完成后數據存放在數據緩沖數組BUFFER_DATA中
  47.                
  48.                 因為沒有現象的話不好判斷SD卡讀寫是否成功,所以把P0BUFFER_DATA[0]賦給P0,P0接LED燈,就可以看見現象了
  49.         }

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

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

評分

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

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

單片機讀寫SD卡.rar

78.27 KB, 下載次數: 16, 下載積分: 黑幣 -5

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

ID:983266 發表于 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內存卡,都卡在了這個地方,無法初始化,但是用之前的32g的,1g,2g的都正常,不知道是哪里問題,新的卡不支持SPI模式嗎?
回復

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

ID:830688 發表于 2022-2-25 17:19 | 顯示全部樓層
你好,感謝分享。你那個“檢測SD卡響應”的函數不怎么管用,改成如下好多了。
//檢測SD卡的響應————返回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 發表于 2022-6-3 23:16 | 顯示全部樓層
謝謝樓主,很有幫助
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:1039438 發表于 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卡寫入數據,一次最多512字節(扇區,數據長度(最大為512,建議填512))
                for(i=0;i<512;++i) BUFFER_DATA[i ]=0x00;//緩沖區數據清零

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

使用道具 舉報

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

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:79094 發表于 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);//發送命令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 命令回應不正確  好坑啊  有sd 的沒 給新人學習下把 搞了一個多星期啊  我好想哭啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产91精品网站 | 久久精品视频播放 | 精品一区二区免费视频 | 中文字幕av在线一二三区 | 亚洲 中文 欧美 日韩 在线观看 | 天堂在线91 | 久久国产亚洲精品 | www.啪啪.com| 97免费在线视频 | 亚洲高清三级 | 久久亚洲综合 | 激情一区二区三区 | av在线伊人 | 北条麻妃视频在线观看 | 男女性毛片 | 久久av.com | 成人性生交大片 | 中文字幕在线一区二区三区 | 黄网站涩免费蜜桃网站 | 颜色网站在线观看 | 亚洲精品一区国产精品 | 欧美一区二区三区在线观看视频 | 一本大道久久a久久精二百 国产成人免费在线 | 超碰97免费观看 | 欧美啪啪网站 | 久久久精品一区 | 精品久久九九 | www.xxxx欧美| 久久综合一区 | 国产精品视频97 | 欧美日韩精品在线一区 | 一区二区精品在线 | 久久天堂网| 91精品久久久久久久久久入口 | 蜜桃av一区二区三区 | 亚洲精品国产偷自在线观看 | h片在线免费看 | 一区二区在线免费观看 | 在线毛片网 | 午夜爽爽爽男女免费观看影院 | 羞羞视频网站在线观看 |