bác nào đã làm về đọc file mp3 xin cho ý kiến đi.chắc hẳn có rất nhiều bạn quan tâm đến cái này
Thông báo
Collapse
No announcement yet.
SD card và MMC card
Collapse
This is a sticky topic.
X
X
-
sorry vì mình không post được hình do hình có kích thước lớn quá hay sao ấy (1.4M) nhưng đại khái thì mình dùng hàm đọc sector 0 thì ở địa chỉ 446=0x00; 447=0x04;448=0x02;450=0x06;451=0x08;452=0xc8;453=0 xd0;454=0xFD;458=0X03;459=0X07;460=0X1E;510=0X55;5 11=0XAA; còn lại tất cả =0 . có bác nào có kinh nghiệm về cái này nói dùm em là thẻ SDcard của em đã active được chưa và nếu em muốn đọc những cái này để biết các thông tin về thẻ, thì phải làm như thế nào (bác nào có tài liệu về đọc cái này thì cho em với ). em xin chân thành cảm ơn !
Comment
-
Nguyên văn bởi Minh Hai Xem bài viếtsorry vì mình không post được hình do hình có kích thước lớn quá hay sao ấy (1.4M) nhưng đại khái thì mình dùng hàm đọc sector 0 thì ở địa chỉ 446=0x00; 447=0x04;448=0x02;450=0x06;451=0x08;452=0xc8;453=0 xd0;454=0xFD;458=0X03;459=0X07;460=0X1E;510=0X55;5 11=0XAA; còn lại tất cả =0 . có bác nào có kinh nghiệm về cái này nói dùm em là thẻ SDcard của em đã active được chưa và nếu em muốn đọc những cái này để biết các thông tin về thẻ, thì phải làm như thế nào (bác nào có tài liệu về đọc cái này thì cho em với ). em xin chân thành cảm ơn !
Comment
-
Hic , Mọi người cho mình hỏi , tại sao khi mình không gửi lệnh cmd 0, thay vào đó là {0x00,0x00,0x00,0x00,0x00,0x00} hoặc {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF} thì SD card vẫn phản hồi lại 0x01 cảm ơn mọi người nhiều, mình đánh vật với cái này gần 1 tháng rồiđây là code của mình
Code:void Initialization (void) { int status = 0xFF; int i = 0; int ii = 0; int iii = 0; int true1 = 0; int true2 = 0; PORTC.DDR.BIT.B0 = 1; PORTC.DR.BIT.B0 = 1; while(i<1000) { TX2_CHAR('%'); WriteSD(0XFF); // DELAY TIME i++; } PORTC.DR.BIT.B0 = 1; // Error(); while(status != 0x01 ) { status = WriteCommand(CMD0,0); ii++; } Error(); if(ii == 100) { TX2_CHAR('?'); Error(); } ii = 0; while(status == 0x01 && ii < 8) { status = WriteCommand(CMD8,0); ii++; } // Error(); TX2_NUM(status); TX2_CHAR('!'); status = 0xFF; TX2_CHAR('!'); while(true1 == 0|| true2 == 0) { status = 0xFF; status = WriteCommand(CMD55,0); true1 = 0; true2 = 0; if(status == 0x00) { true1 = 1; TX2_CHAR('+'); } else true1 = 0; status = 0xFF; status = WriteCommand(ACMD41,0); if(status == 0x00) { true2 = 1; TX2_CHAR('@'); } else true2 = 0; TX2_NUM(status); } // if(iii == 100) // TX2_CHAR('?'); // Error(); status = 0xFF; status = WriteCommand(CMD58,5); // TX2_NUM(status); i = 0; while(i<5) TX2_NUM(RES[i++]); RSPI0.SPCR.BIT.SPE = 0; // DISABLE RSPI FUNCTION RSPI0.SPBR.BYTE = 3*(PCLK / SD_CLOCK_RUN / 2 -1); //Clock at 24MHz RSPI0.SPCR.BIT.SPE = 1; // ENABLE RSPI FUNCTION } ///////////////////////////////////////////////COMMAND SENDING/RECIVEING HANDLER /////////////////////////////////////////////////////////////// void Receive_handling(void) { int i = 0; read = 1; RSPI0.SPDCR.BIT.SPRDTD = 0; /* if(command == 1) { response = RSPI0.SPDR.WORD.H; TX2_CHAR('R'); TX2_NUM(response); command = 0; } */ if(waiting !=0) { RES[i++] = RSPI0.SPDR.WORD.H; waiting --; TX2_CHAR('?'); } if(RSPI0.SPDR.WORD.H != 0xFF && delay1 != 0) { delay1 = 0; TX2_CHAR('D'); TX2_NUM (RSPI0.SPDR.WORD.H); response = RSPI0.SPDR.WORD.H; // command = 1; } SD_data = RSPI0.SPDR.WORD.H; TX2_NUM (SD_data); RSPI0.SPDCR.BIT.SPRDTD = 1; } int ReadSD() { int i = 0; while(read == 0) { i++; if(i>=0xFFFF) read = 1; } read = 0; return SD_data; } void WriteSD(int data) { RSPI0.SPDR.WORD.H = data; while(done == 0); // TX2_CHAR('#'); done = 0; } char WriteCommand(char* cmd, int length) { int i = 0; SD_data = 0xFF; response = 0xFF; TX2_CHAR('<'); PORTC.DR.BIT.B0 = 0; // while(i<0xFFF) i++; WriteSD(0XFF); // for (i = 0; i<6; i++) // { // WriteSD(cmd[i]); // } delay1 = 1; i = 0; while(delay1 != 0 && i < 8) { WriteSD(0XFF); //i++; } // WriteSD(0XFF); TX2_CHAR('T'); waiting = length; while(waiting >0) { WriteSD(0XFF); TX2_CHAR('#'); } WriteSD(0XFF); PORTC.DR.BIT.B0 = 1; WriteSD(0XFF); // TX2_NUM (SD_data); TX2_CHAR('>'); TX2_NUM (response); return response; } void Transmit_handling(void) { done = 1; }
Comment
-
Chào bác windy2055! Nghe bác nói thì chắc bác đã làm cái giao tiếp SDCard vơi ARM rồi, tôi thì mới tìm hiểu và đang bắt đầu làm về nó nhưng thấy phức tạp và khó hiểu quá. Bác làm rồi, các bước làm như thế nào, thực hiện ra làm sao bác biết bác chỉ giùm tôi vài chiêu hay tài liệu gì được không bác.
Cám ơn bác nhiều nhé.
Comment
-
Tôi cũng đang tìm hiểu về vấn đề này, nếu bạn muốn dùng nguồn 3,3V thì bạn có thể dùng IC LM317 hoặc từ nguồn 5V cho qua 3 Diod. Mục đích của tôi cũng giống như bạn là dùng AVR ghi data vào SD/MMC và nó được save dưới dạng một file text. Ai đã từng làm hãy cho tôi cùng mọi người giải pháp với
Comment
-
e đang làm đồ án píc6f877a giao tiep mmc card .
bác nào có code c và file mô phỏng đọc thẻ nhớ ko thì giúp e với
thẻ nhớ nhỏ hơn 4G thì là định dạng FAT16 đúng ko?
Ví dụ muốn format một thẻ nhớ theo định dạng Fat16 hay fat 32 có được ko?nothing impossible
Comment
-
Nguyên văn bởi yankazaz Xem bài viếtThẻ nhớ thường được format dưới FAT16, nhưng những loại thẻ có dung lượng cao đều support FAT32 (bạn có thể ghi từ Win sang thẻ nhớ những file dài đến ..ái). Tuy nhiên khi có một thẻ nhớ bất kỳ bạn nên reformat dưới dạng FAT16!nothing impossible
Comment
-
Nguyên văn bởi yankazaz Xem bài viếtGiả sử đã khởi tạo MMC, chúng ta sẽ bàn tiếp đến các hàm đọc và ghi sector cho MMC.
- Do đọc dễ hơn ghi, nên tôi nói hàm read_sector trước.
Command đọc 1 sector là Command 17. 17(dec) = 0x11(hex) = 0001 0001
Ghép với byte command 0x01.... ta có : 0x0101 0001 = 0x51
Vậy lệnh đọc là : CMD17( 0x51, byte4..1,0x00)
Có một điều hơi khó hiểu chỗ này, các bác cẩn thận này:
Các byte4-1 là địa chỉ theo byte, nhưng MMC lại đọc theo sector. Có nghĩa là: giả sử chúng ta cần đọc sector0 = 512byte đầu tiên, MMC sẽ gửi dữ liệu bắt đầu từ byte số 0. Vậy 4byte này là 0x00 0x00 0x00 0x00 = 0!
Nhưng giả sử chúng ta muốn đọc sector 1, là 512byte tiếp theo, MMC sẽ gửi từ byte thứ 512 đến byte 1023, vậy 4byte này phải trỏ đến byte thứ 512 và như vậy có giá trị là: 0x00 0x00 0x02 0x00 = 0x200 = 512.
Vậy nếu chúng ta có 4 thanh ghi 8bit từ r20-r23 lưu địa chỉ byte, để chuyển thành sector muốn đọc ta làm thêm 1 hàm shift_mmc như sau:
Khi đó, Muốn đọc sector 0, r23..r20 = 0x00 0x00 0x00 0x00
Muốn đọc sector 1, r23..r20 = 0x00 0x00 0x00 0x01 0x00
Áp dụng hàm shift_mmc cho trường hợp này:
r20 = 0x00
r21 = 0x01, lsl r21 = 0x02
rol r22 = 0x00
rol r23 = 0x00
---> r23..r20 = 0x00 0x00 0x02 0x00
Các bác có thể thử với một vị trí sector bất kỳ để hiểu đoạn này
Như vậy, lệnh đọc sector MMC sẽ là: (giả sử sector 1)
bác 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.nothing impossible
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Tiếng Anh cho người Việtbởi bqvietĐúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 20:26 -
-
Trả lời cho Tiếng Anh cho người Việtbởi mèomướpDạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 12:32 -
-
Trả lời cho Tiếng Anh cho người Việtbởi vi van phamNhững lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).
Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...-
Channel: Tâm tình dân kỹ thuật
20-02-2025, 21:31 -
-
Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )bởi bqvietThiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.20-02-2025, 17:22
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Tiếng Anh, Đình Thường phải nói là rất tệ, khiến việc giao tiếp đời thường thôi cũng khó chứ nói gì về kĩ thuật.
Nhân tiện, nhờ các bạn, các bác xem giúp thư ĐT viết thế này liệu có thể gửi tới địa chỉ nhận hay chăng,...-
Channel: Tâm tình dân kỹ thuật
20-02-2025, 11:52 -
-
Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )bởi vi van phamUống rượu 1 mình, thấy trang này nhớ lại cách đây vài chục năm hàn thiếc với inox cực kỳ khó, phải dùng acid Hcl tác dụng lên kẻm Zn để có Zncl2 làm thuốc trợ hàn, lúc đó làm gì có acid Hcl và thuốc trợ hàn?
Cái khó bó cái...19-02-2025, 23:05 -
Trả lời cho Tiếng Anh cho người Việtbởi nhathung1101Nếu chú tâm thì học tiếng Việt cũng đủ rồi, thừa sức làm việc rồi.
Học tiếng Anh cũng chỉ phụ trợ để đọc thêm tài liệu, hướng dẫn.
Nhưng có hiểu điều đó không mới là vấn đề. Khi mà học ngoại ngữ để đi đạp xích lô đón khách???...-
Channel: Tâm tình dân kỹ thuật
19-02-2025, 21:27 -
-
bởi xenopus123Cần hỗ trợ mạch đồng hồ vạn niên 89c52 ds1302 ds18b20 dùng 16 led 7 đoạn
-
Channel: Hỗ trợ học tập
19-02-2025, 21:24 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi nhathung1101Nhìn kỹ hàng đi cu. Chứ ra đường cứ thấy đàn bà rồi bảo:
- Tôi cũng có vợ như thế....
Đảm bảo cu nát người luôn....-
Channel: Điện tử dành cho người mới bắt đầu
19-02-2025, 21:04 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi matnetgia99Ồ, cái này mình cũng có nè, có ai mua không, đồ cũ dùng từ năm 2008, hư 1 2 giai gì đấy bỏ xó hơn năm nay...
-
Channel: Điện tử dành cho người mới bắt đầu
17-02-2025, 14:40 -
Comment