Thông báo

Collapse
No announcement yet.

giao tiếpn 89S52 với thẻ MMC

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • giao tiếpn 89S52 với thẻ MMC

    Hi all,

    Có ai đã từng giao tiếp 89S52 với thẻ nhớ MMC, góp ý với tui về protocol với.
    cái CRC7 tính làm sao nhỉ ?

    regards,

  • #2
    theo tui được biết thì giao tiếp với MMC là theo chuẩn SPI đấy!
    Thiết kế, sửa chữa PLC,HMI, Servo,biến tần, máy tính công nghiệp
    Lập trình ứng dụng VĐK, IC logic lập trình được (PAL,GAL, FPGA...)
    DT:098 861 4347

    Comment


    • #3
      À mà con 89s52 thì không có chuẩn giao tiếp SPI nên tất cả phải làm thủ công thôi!
      Thiết kế, sửa chữa PLC,HMI, Servo,biến tần, máy tính công nghiệp
      Lập trình ứng dụng VĐK, IC logic lập trình được (PAL,GAL, FPGA...)
      DT:098 861 4347

      Comment


      • #4
        hi,
        tui giao tiep ok, doc sector 0 (bôt sector) gom 512 byte nhung sao chi co 2 byte cuoi cung la dung thoi (55 AA), còn lại toàn 00 không là sao ?

        regards,

        Comment


        • #5
          Góp ý(vì cũng chưa làm): Hình như nó đọc theo từng Block,mỗi Block quy định bao nhiêu byte có chừng, muốn đọc nữa thì khởi động lại quy trình đọc.

          Comment


          • #6
            Đọc tài liệu này thử xem có giúp được gì chăng
            Attached Files

            Comment


            • #7
              Bạn có thế dùng con khác thuộc dòng 8051 chứ không nên dùng 89S52. Nên chọn các loại vi điều khiển có cỡ 1K RAM trở lên, nên thao tác với thẻ MMC theo đơn vị là từng sector thì đơn giản hơn, có thể dùng cỡ 130 byte hoặc nhở hơn chút là có thể thao tác trên bảng FAT của thẻ MMC, nhưng rất tủn mủn.

              @duyphi: đúng như bạn nghĩ, nó giao tiếp thông qua các block, có các lệnh đọc 1 block hoặc nhiều block. Có thể định được độ dài của từng block thông qua lệnh set block length, muốn đọc tiếp thì gửi lệnh đọc tiếp cho nó.

              @cvbac: đúng là 2 byte cuối cùng của sector 0 kết thúc bằng 0xAA55, còn lại là 00 thì bạn đọc sai sector 0 rồi, tớ không có đồ ở đây, lúc khác sẽ post cho bạn cái sector 0.
              CRC thì bạn có thể tham khảo các ví dụ trên mạng nó đã tính sẵ́n CRC cho bạn rồi, hoặc có thể tham khảo bảng CRC của tớ:

              Code:
              #define     GO_IDLE_STATE        	0x40		//0  		0x95
              #define     SEND_OP_COND         	0x41		//1         0xF9
              #define     SEND_CSD             	0x49		//9			0xAF
              #define     SEND_CID             	0x4a		//10		0x1B
              #define     STOP_TRANSMISSION    	0x4c		//12		0xC3
              #define     SEND_STATUS          	0x4d		//13		0xAF
              #define     SET_BLOCKLEN         	0x50		//16		0xFF
              #define     READ_SINGLE_BLOCK    	0x51		//17		0xFF
              #define     READ_MULTI_BLOCK     	0x52		//18		0xFF
              #define     WRITE_SINGLE_BLOCK   	0x58		//24		0xFF    
              #define     WRITE_MULTI_BLOCK    	0x59		//25		0xFF
              #define     TAG_SECTOR_START     	0x60		//32		0xFF
              #define     TAG_SECTOR_END       	0x61		//33		0xFF	
              #define     UNTAG_SECTOR         	0x62		//34		0xFF
              #define     TAG_ERASE_GRP_START  	0x63		//35 		0xFF
              #define     TAG_ERASE_GRP_END    	0x64		//36		0xFF
              #define     UNTAG_ERASE_GRP      	0x65		//37		0xFF
              #define     ERASE                	0x66		//38		0xDF
              #define     SD_APP_OP_COND       	0x69		//41		0xE5
              #define     LOCK_UNLOCK          	0x71		//49		0x89
              #define     APP_CMD              	0x77		//55		0x73
              #define     READ_OCR             	0x7a		//58		0x25
              #define     CRC_ON_OFF           	0x7b		//59		0x25
              cột đầu tiên là tên lệnh, thứ 2 là mã hex của lênh, cột sau dấu // là mã CRC

              Comment


              • #8
                Hi phamthaihoa,

                mình setup theo thứ tự sau

                power on
                send cmd0 --> nhận response 0x01 (0x40,0x00,0x00,0x00,0x00,0x95)
                send cmd1 --> nhận response 0x00 (0x41,0x00,0x00,0x00,0x00,0xff)
                send cmd16 --> nhận response 0x00 (0x50,0x00,0x00,0x02,0x00,0xff)
                send cmd17 --> nhận response 0x00 (0x51,0x00,0x00,0x00,0x00,0xff)
                chờ nhận token = 0xfe --> ok
                nhận 512 byte data
                nhận 2 byte CRC

                không biết có còn phải set thêm register nào nữa không ?
                kết quả mỗi 2 byte cuối là 0x55AA, còn lại 0x00

                Comment


                • #9
                  Đấy chỉ là sector0 của thẻ MMC thôi, còn sector 0 của bảng FAT nằm ở địa chỉ khác.
                  Bạn phải đọc được giá trị Partition Offset này trước.
                  Ví dụ đoạn code đọc offset này.
                  Code:
                  unsigned long getPartitionOffset(void)
                  {
                  	unsigned int count = 0;
                  	unsigned long offset = 0;
                  	unsigned char charBuf;
                  	MEM_PORT_OUT &= ~CS;
                  	sendCommand(CMD17,0,0,0,0,0xFF);
                  	if(cardResponse(0x00))
                  	{
                  		if(cardResponse(0xFE))
                  		{
                  			for(count = 0; count < 454; count++)
                  				spi_get();
                  			charBuf = spi_get();
                  			offset = charBuf;
                  			charBuf = spi_get();
                  			offset |= (unsigned long int)charBuf << 8;
                  			charBuf = spi_get();
                  			offset |= (unsigned long int)charBuf << 16;
                  			charBuf = spi_get();
                  			offset += (unsigned long int)charBuf << 24;
                  			for(count = 458; count < SECTOR_SIZE; count++)
                  				spi_get();
                  			spi_get();
                  			spi_get();
                  		}
                  	}
                  	MEM_PORT_OUT |= CS;
                  	spi_get();
                  	return offset;
                  }
                  offset=getPartitionOffset();
                  sector 0 của FAT = read_sector(offset)

                  Comment


                  • #10
                    hi phamthaihoa,

                    đúng rồi, mình đã đọc được data partition table và tìm ra được boot sector, FAT table, root diectory rồi, cám ơn nhiều nhé.
                    tại mình lẫn lộn khi dùng lệnh debug để đọc thì sector 0 là boot sector của thẻ, nên cứ nhầm là sector 0 bắt buộc phải là boot sector, thực tế đối với địa chỉ vật lý của MMC thì không phải vậy.

                    Comment


                    • #11
                      Mình chưa nghiên cứu về MMC nói riêng và thẻ nhớ nói chung nhưng cũng muốn hỏi các bạn giới thiệu qua về loại thẻ nhớ này: dung lượng được bao nhiêu,trên thị trường có không,giao tiếp.....Mong mọi người giới thiệu dùm!Bạn Phamthaihoa dùng rồi chắc rõ nhất giúp mình chút nhé!
                      Technical Institutes
                      Mobile: 0983278725
                      Email:

                      Comment


                      • #12
                        Nguyên văn bởi cvbac Xem bài viết
                        hi phamthaihoa,

                        đúng rồi, mình đã đọc được data partition table và tìm ra được boot sector, FAT table, root diectory rồi, cám ơn nhiều nhé.
                        tại mình lẫn lộn khi dùng lệnh debug để đọc thì sector 0 là boot sector của thẻ, nên cứ nhầm là sector 0 bắt buộc phải là boot sector, thực tế đối với địa chỉ vật lý của MMC thì không phải vậy.
                        Chào bạn CVBAC và bạn phamthaihoa, các bạn làm được rồi thì có thể chia sẻ kinh nghiệm để mọi người cùng học hỏi được không? Các banij có thể nói rõ hơn về thuật toán đọc và ghi parttion table để mọi người cùng học hỏi được không? Cảm ơn sự nhiệt tình của các bạn.

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X