Thông báo

Collapse
No announcement yet.

SD card và MMC card

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Nguyên văn bởi lequyen Xem bài viết
    làm ơn chỉ giùm cách đọc sector o bằng c ,rồi cho hiển thi trên virtual terminal với.
    Để đọc được first sector đòi hỏi người giúp bạn phải có hiểu biết sâu sắc về phần cứng, ngôn ngữ lập trình C đặc biệt là biết rõ con trỏ và structure, về FAT...
    Để được được first sector bạn cần có:
    + Phần cứng đã chính xác, nhất là phần logic giữa SD card và vi điều khiển.
    + Vi điều khiển khởi tạo được giao diện SPI, UART.
    + Có chương trình gửi lệnh sang SD card (Đòi hỏi bạn phải biết tập lệnh của SD card).
    + Có chương trình khởi tạo SD card.
    + Có chương trình đọc block.

    Sau khi đọc được first sector, bạn chưa làm được gì hết. Bạn phải viết thêm chương trình đọc boot sector, có thêm thuật toán tìm root cluser, số byte trong mổi cluser. Sau đó bạn mới tìm được root entry, đọc thêm kiến thức về short file name và long file name nữa thì mới làm nên chuyện.

    Comment


    • Bác có thể nói chi tiết một chút được không a?bác có tài liệu gì về những thứ này ko cho e xin với?
      nothing impossible

      Comment


      • ?????????????????????
        nothing impossible

        Comment


        • help me!..............
          nothing impossible

          Comment


          • hi vong trang ưeb nay co the giup ban:http://www.hocavr.com/index.php/en/app/mmc
            Last edited by locdoan; 20-10-2011, 11:22.
            Phone:01649.488.486
            Email:doanvanlocmta@gmail.com

            Comment


            • Nguyên văn bởi locdoan Xem bài viết
              hi vong trang ưeb nay co the giup ban:Giao tiếp card MMC/SD
              Thông tin trong trang web này là những điều cơ bản nhất về SD card. Với những kiến thức cơ bản này bạn chỉ có thể ghi hoặc đọc dữ liệu trong SD card giống như eeprom, còn ghi đọc theo FAT32 thì hok có được.

              Comment


              • Đọc MMC được là good rồi, cái này làm từ hồi cái thẻ nhớ có 16MB, lúc đó chỉ có Fat12 mới ghê chứ. Đọc và ghi file excel dữ liệu cân xà phòng cho P&G vui vãi. Bây giờ FAT32 thì làm vô tư nhỉ.

                Email:
                Tel: 0983.497.310

                Comment


                • Mình cũng mới bắt đầu tìm hiểu về SDcard.Mài mò xong thấy cái này hay hay post cho mọi người thì khám phá.Cái này rất hay cho mọi người bắt đầu khám phá về SDcard không cần phải sử dụng kíp thí nghiệm.Chỉ cần 1 cái laptop có giao tiếp với Sdcard là Ok.Chúng ta sẽ tiếp cận giao tiếp với host controler bằng cách sử dụng code của linux.Đảm bảo sao khi đọc xong có linux bạn sẽ học được rất nhiều đều hay về cách lập trình C.

                  I.Setup ubuntu 11.10
                  1. Download Ubuntu 11.10 Download | Ubuntu
                  2.Run file wubi.exe để cài đặt ubuntu vào máy tính
                  -Nên cài đặt dung lượng ổ đĩa lớn hơn 15G
                  -Trong quá trình cài đặt không cần phải update khỏi phải tốn nhiều thời gian
                  -Nên đặt Password cho Ubuntu
                  3.Open Terminal (Win +Terminal +Enter)
                  -Update apt-get (sudo apt-get update)
                  -Upgrade apt-get (sudo apt-get upgrade)
                  4.Download linux source 3.0
                  -sudo apt-get install dpkg
                  -Sudo apt-get source linux-source -3.0.0
                  II.Build nhân linux mới vào hệ thống
                  Build lại nhân linux để tạo dirver mmc thành một module riêng lẽ không phụ thuộc vào hệ thống
                  -cd linux-3.0.0
                  -sudo su
                  -make oldconfig
                  -nano .config
                  Ctrl+W : “CONFIG_MMC” edit text CONFIG_MMC=m (Ctrl+X,Y)
                  -make
                  -make modules_install
                  -make install
                  -reboot
                  Thế là xong quá trình chẩn bị linux để debug driver of mmc


                  II.Chẩn bị công cụ lập trình
                  1.Setup java run time
                  -sudo apt-get install sun-java6-jdk
                  2.Download eclipse C/C++ Eclipse downloads - mirror selection
                  3.Chmod linux-Project
                  -chmod –R 777 ~/linux-3.0.0
                  4.Tạo Project on eclipse
                  File->New->Other->C/C++->Makefile Project with Existing Code
                  5.Edit file sdhci.c on driver/mmc/host/sdhci.c
                  -Find function sdhci_add_host Ghi vào lệnh printk(“SDHCI BEGIN\n”) lệnh printk trong linux thay cho lệnh printf trong C .Lệnh printk sẽ được ghi vào file /var/log/syslog (cat /var/log/syslog)
                  -Thêm đoạn code printk("SDHCI_SEND_COMMAND CMD =%d\n",cmd->opcode);Trong funtion sdhci_send_command
                  6.Build module MMC
                  -cd ~/linux-3.0.0/driver/mmc
                  -sudo su
                  -nano run
                  -Pase “
                  echo Makefile====================================
                  make -C /lib/modules/`uname -r`/build M=`pwd` clean
                  echo clear===============================
                  make -C /lib/modules/`uname -r`/build M=`pwd` modules
                  echo modules===========================
                  make -C /lib/modules/`uname -r`/build M=`pwd` modules_install
                  echo modulesinstall===========================
                  echo rmmod_old

                  rmmod sdhci_pci
                  rmmod sdhci
                  rmmod mmc_block
                  rmmod mmc_test
                  rmmod mmc_core

                  rm /lib/modules/3.0.9/kernel/drivers/mmc/host/sdhci.ko
                  rm /lib/modules/3.0.9/kernel/drivers/mmc/host/sdhci-pci.ko
                  rm /lib/modules/3.0.9/kernel/drivers/mmc/card/mmc_block.ko
                  rm /lib/modules/3.0.9/kernel/drivers/mmc/card/mmc_test.ko
                  rm /lib/modules/3.0.9/kernel/drivers/mmc/card/mmc_core.ko

                  cp host/*.ko /lib/modules/3.0.9/kernel/drivers/mmc/host/
                  cp core/*.ko /lib/modules/3.0.9/kernel/drivers/mmc/core/
                  cp card/*.ko /lib/modules/3.0.9/kernel/drivers/mmc/card
                  echo insmod


                  cd core
                  insmod mmc_core.ko

                  cd ../host
                  insmod sdhci.ko
                  insmod sdhci-pci.ko

                  cd ../card
                  insmod mmc_block.ko
                  insmod mmc_test.ko
                  insmod mmc_test.ko

                  cd ../mmc_app
                  insmod mmc_app.ko


                  echo AllisOk


                  modinfo sdhci

                  -chmod 775 run
                  -nano display
                  -pase “

                  cat /var/log/syslog

                  -./run
                  -./display

                  Thảm khảo thêm tài liệu về cách giao tiếp sdcard
                  https://www.sdcard.org/home/

                  Post lên cho mọi người tham khảo ai có cùng sở thích thì thảo luận thêm
                  Bùi Quang Huyện

                  web:quanghuyenkhoahoc.x10.mx
                  mail:quanghuyen@live.com
                  fone:01992709506

                  Comment


                  • các bạn xem luồng này để hiểu cách thao tác sd card theo fat nhé: http://www.dientuvietnam.net/forums/...c-sd-card-591/
                    các vấn đề về sdcard, usb, tcp/ip, upgrate firmware,...
                    trên các dòng chip: stm32, lpc of nxp
                    please cell phone: 01649895559

                    Comment


                    • Thấy mấy đồng chí hào hứng với SD/CF card nên mình cũng giới thiệu với các anh chị em "một module khá hay, bảo đảm xài là được ngay" :
                      ELM - FatFs Generic FAT File System Module
                      Còn đây là hướng dẫn:
                      MMC/SD Card and FAT Tutorial
                      chi tiết hơn:
                      Simple FAT and SD Tutorial Part 1
                      Simple FAT and SD Tutorial Part 2
                      Simple FAT and SD Tutorial Part 3
                      Đầy đủ rồi đó, dẫn tới cửa bảo vào nhà mà không biết đương f vào nữa thì bó tay nha .
                      Chúc các bạn học vui.

                      Comment


                      • mình cũng đang làm giao tiếp avr + micro Sd card nè. nhưng không hiểu lỗi xảy ra ở chõ nào mà khi minh truyền data cho no có 512 bytes thui mà khi kiểm tra dung lượng thẻ nhớ thì nó báo 4M. không biết đoạn chương trình này có lỗi gì nữa. Huynh nào chỉ mình xíu:

                        void mmc_tCommand(unsigned char Cmd,long arg){
                        unsigned char response, retry = 0;
                        //command la 48 bit lien tiep trong do
                        //bit47=0 (start bit)
                        //bit46=1 (transmission bit)
                        //bit45:40 la ma lenh
                        //bit39:8 la argument cua lenh
                        //bit7:1 Cyclic Redundancy Check (CRC)
                        //bit0=1 la end bit

                        SS_PIN = 0; //kich hoat duong SS cua SPI, MMC duoc chon
                        SPI_tByte(0xFF); //dummy, 1 lenh luon bat dau 0 nen send FF thi MMC ko dap ung
                        SPI_tByte(Cmd | 0x40); //0x40=01000000 la ma bat buoc khi goi lenh

                        SPI_tByte((unsigned char)(arg >>24));
                        SPI_tByte((unsigned char)(arg >>16));
                        SPI_tByte((unsigned char)(arg >> 8));
                        SPI_tByte((unsigned char) arg);
                        SPI_tByte(0x95); //CRC, cho lan dau nhung neu cac lan sau send 0x95 cung ko van de;

                        while((response=SPI_rByte()) == 0xff)
                        if(retry++ > 0xfe) break;

                        SS_PIN = 1;
                        }


                        //XXXXXXXXXXXX fileneme XXXXXXXXX
                        unsigned char SD_writeSingleBlock(unsigned long startBlock)
                        {
                        unsigned char mmc_status ;
                        unsigned int i,retry = 0;

                        SS_PIN = 1;
                        mmc_tCommand(CMD24,startBlock<<9) ;

                        if(mmc_rResponse(0x00) == 1){ //co loi kiem tra response
                        mmc_status=4; // timeout khi goi lenh write block
                        SS_PIN = 1; //disable SPI MMC
                        return mmc_status;
                        }

                        SS_PIN = 0;

                        SPI_tByte(0xfe);

                        for(i=0;i<512;i++) SPI_tByte(buff[i]);

                        SS_PIN = 1;

                        SPI_tByte(0xff);
                        SPI_tByte(0xff);

                        mmc_status =SPI_rByte();

                        if((mmc_status & 0x1f) != 0x05) { SS_PIN=1; return mmc_status;}

                        while( ! SPI_rByte())
                        if(retry++ > 0xfffe) { SS_PIN =1; return 1;}

                        SPI_tByte(0xff);

                        SS_PIN = 0;

                        while( !SPI_rByte())
                        if(retry++ > 0xfffe) { SS_PIN =1; return 1;}
                        SS_PIN = 1;

                        return 0;

                        }
                        //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                        Comment


                        • em cũng đang làm một đề tài có sử dụng amega128 về truyền nhận số liệu lưu trữ. kiểu như xác định hành trình bằng GPS. e định lưu dữ liệu ấy vào thẻ nhớ dưới dạng text và sử dụng như 1 hộp đen trên oto. hi, các bác cho em hỏi tính khả thi với. về phần GPS thì đã xong. còn phần lưu trữ nữa. làm thế nào để lưu dữ liệu ấy vào thẻ nhớ thành file định dạng .txt được các bác nhỉ?

                          Comment


                          • Nguyên văn bởi nguyentuanqs Xem bài viết
                            em cũng đang làm một đề tài có sử dụng amega128 về truyền nhận số liệu lưu trữ. kiểu như xác định hành trình bằng GPS. e định lưu dữ liệu ấy vào thẻ nhớ dưới dạng text và sử dụng như 1 hộp đen trên oto. hi, các bác cho em hỏi tính khả thi với. về phần GPS thì đã xong. còn phần lưu trữ nữa. làm thế nào để lưu dữ liệu ấy vào thẻ nhớ thành file định dạng .txt được các bác nhỉ?
                            Ghi thẻ nhớ định dạng .txt tức là bạn muốn ghi thẻ định dạng FAT, trên mạng có khá nhiều project làm điều này. Một trong các thư viện mình thấy dễ sử dụng nhất là FATFS, bạn có thể xem thử và ứng dụng vào, phần example của nó có đoạn cho AVR đấy.

                            Comment


                            • Up lên hi vọng có bài viết thêm.

                              Let's go!!!

                              Comment


                              • Nguyên văn bởi yankazaz Xem bài viết
                                - Về FAT, tôi đã giới thiệu qua ở những bài trên, để hiểu một cách tốt nhất, bạn nên vào MSDN của microsoft, in ra các bảng sau:
                                + Partition Boot Record
                                + Master Boot Record
                                + FAT entry
                                + Root directory entry

                                Những entry này thực chất là những sector có vị trí đặc biệt trên MMC/SD. Nhiệm vụ của chúng ta là sử dụng hàm đọc sector, bắt đầu đọc từ Master Root Record để lấy thông tin cho việc sử lý. Những thông tin chúng ta cần đều nằm trong 4 bảng nói trên. Ở đây có một điều lưu ý các bạn:
                                + Tất cả MBR trên mọi thẻ nhớ đều bắt đầu từ sector0 - tức sector đầu tiên
                                + Thông thường, đối với những thẻ nhớ có dung lượng nhỏ, MBR thường không có khi bạn build image bằng các công cụ như disk explorer, lý do: dung lượng nhỏ quá, và không cần thiết đến MBR để chia thẻ làm 2 -3 partition làm gì cả. (đây là thông tin tôi hỏi admin của avrfreaks.net)

                                + Tuy nhiên, theo thực tế thì thẻ 32Mb vẫn có MBR. Và tôi vẫn xử lý với thẻ 32Mb cũng như 512Mb theo hướng có MBR và ok với cả 2. Do vậy, khi mô phỏng bạn sẽ làm với sector0 là PBR, còn thực tế thì phải có hàm MBR ở sector0.

                                Tôi kết thúc ở đây, tất nhiên là còn thiếu nhiều chỗ, và vẫn với một câu là: nếu bạn thích khám phá thì hãy viết code mới. Nếu có thời gian và công sức + hardware + luck thì sẽ thành công (chưa nói đến chuyện tối ưu code). Còn nếu không, bạn có thể hiểu source code về FAT, mà theo tôi biết là có rất nhiều, rất nhiều - kể cả một số project dự thi contest cũng sử dụng nó - FatFs. Tuy nhiên, nói như thế không có nghĩa là nó hoàn hảo. Tôi chỉ xin nêu một vài ví dụ:

                                - Người sử dụng đút thẻ nhớ 512Mb với 10Mb free, bạn sẽ xử lý thế nào? Ghi tiếp, hay yêu cầu format, hay báo lỗi?
                                - Trong khi ghi, đột nhiên bị mất điện, vậy khi cấp điện bạn sẽ ghi lại từ đầu, hay ghi tiếp. Làm thế nào để biết điểm mình đang ghi ở chỗ nào? Loại trừ việc dùng battery, do battery cũng sẽ hết?
                                Còn nhiều điều phát sinh nữa, đặc biệt trong quá trình ghi. Và tôi hy vọng mọi người sẽ tiếp tục theo dõi & thảo luận thread này. Về thông tin tôi nêu ra trong bài, thật sự là nó ở rất nhiều nguồn và datasheet của nhiều hãng, không hề sao chép ở bất cứ đâu. Các bạn muốn tìm về nguồn cội tôi khuyên nên search FatFS và vào trang đầu tiên (sr do kô nhớ).
                                bác cho e hỏi vấn đề này với:
                                -mỗi lần ghi vào thẻ thì phải ghi 1sector, ở đây là thẻ định dạng FAT16, có 512byte/sector. vậy khi ta ghi vào thông tin về file ở vùng Root directory entry và FAT entry như thế nào.
                                Khi đó có phải đọc cả sector đó cho vào bộ đệm, rồi mới thay đổi nội dung của những địa chỉ byte mà chứa thông tin file đó, sau đó lại ghi lại toàn bộ sector đó ko. Nếu như vậy đồng nghĩa với việc ta phải ghi lại toàn bộ thông tin các file đã có sẵn trong thẻ được lưu trữ ở sector đó ah.

                                - và phần lưu tên file hay folder ở vùng Root directory entry có 11byte, như vậy nếu tên file >11byte thì ta ghi thế nào nhỉ.
                                email:trangonthuocthom@gmail.com

                                Comment

                                Về tác giả

                                Collapse

                                atmega8 Tìm hiểu thêm về atmega8

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X