s

Dependencies:   SD_DISCO_F746NG BSP_DISCO_F746NG

Committer:
fundokukiri
Date:
Tue Jun 11 17:58:34 2019 +0000
Revision:
0:25706db117ec
spkt;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fundokukiri 0:25706db117ec 1 #include "mbed.h"
fundokukiri 0:25706db117ec 2 #include "SD_DISCO_F746NG.h"
fundokukiri 0:25706db117ec 3
fundokukiri 0:25706db117ec 4 SD_DISCO_F746NG sd;
fundokukiri 0:25706db117ec 5 Serial pc(USBTX, USBRX);
fundokukiri 0:25706db117ec 6
fundokukiri 0:25706db117ec 7 #define BLOCK_START_ADDR 0 /* Block start address */
fundokukiri 0:25706db117ec 8 #define NUM_OF_BLOCKS 5 /* Total number of blocks */
fundokukiri 0:25706db117ec 9 #define BUFFER_WORDS_SIZE ((BLOCKSIZE * NUM_OF_BLOCKS) >> 2) /* Total data size in bytes */
fundokukiri 0:25706db117ec 10
fundokukiri 0:25706db117ec 11 uint32_t aTxBuffer[BUFFER_WORDS_SIZE];
fundokukiri 0:25706db117ec 12 uint32_t aRxBuffer[BUFFER_WORDS_SIZE];
fundokukiri 0:25706db117ec 13 /* Private function prototypes -----------------------------------------------*/
fundokukiri 0:25706db117ec 14 void SD_main_test(void);
fundokukiri 0:25706db117ec 15 void SD_Detection(void);
fundokukiri 0:25706db117ec 16
fundokukiri 0:25706db117ec 17 static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLenght, uint32_t uwOffset);
fundokukiri 0:25706db117ec 18 static uint8_t Buffercmp(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength);
fundokukiri 0:25706db117ec 19
fundokukiri 0:25706db117ec 20 int main()
fundokukiri 0:25706db117ec 21 {
fundokukiri 0:25706db117ec 22 uint8_t SD_state = MSD_OK;
fundokukiri 0:25706db117ec 23 pc.printf("\n\nuSD start:\n\r");
fundokukiri 0:25706db117ec 24 SD_state = sd.Init();
fundokukiri 0:25706db117ec 25 if(SD_state != MSD_OK){
fundokukiri 0:25706db117ec 26 if(SD_state == MSD_ERROR_SD_NOT_PRESENT){
fundokukiri 0:25706db117ec 27 pc.printf("xin gan the SD truoc khi test\n\r");
fundokukiri 0:25706db117ec 28 } else {
fundokukiri 0:25706db117ec 29 pc.printf("Khoi tao the SD: FAIL.\n\r");
fundokukiri 0:25706db117ec 30 }
fundokukiri 0:25706db117ec 31 pc.printf("Kiem tra the SD bi huy bo.\n\r");
fundokukiri 0:25706db117ec 32 } else {
fundokukiri 0:25706db117ec 33 pc.printf("Khoi tao the SD: OK.\n\r");
fundokukiri 0:25706db117ec 34 SD_state = sd.Erase(BLOCK_START_ADDR, (BLOCK_START_ADDR + NUM_OF_BLOCKS - 1));
fundokukiri 0:25706db117ec 35
fundokukiri 0:25706db117ec 36 /* Đợi cho đến khi thẻ SD sẵn sàng */
fundokukiri 0:25706db117ec 37 while(sd.GetCardState() != SD_TRANSFER_OK){
fundokukiri 0:25706db117ec 38 }
fundokukiri 0:25706db117ec 39 if (SD_state != MSD_OK){
fundokukiri 0:25706db117ec 40 pc.printf("Xoa the SD: FAILED.\n\r");
fundokukiri 0:25706db117ec 41 pc.printf("Kiem tra the SD bi huy bo.\n\r");
fundokukiri 0:25706db117ec 42 } else {
fundokukiri 0:25706db117ec 43 pc.printf("Xoa the SD: OK.\n\r");
fundokukiri 0:25706db117ec 44
fundokukiri 0:25706db117ec 45 /* Ghi vào bộ đệm */
fundokukiri 0:25706db117ec 46 Fill_Buffer(aTxBuffer, BUFFER_WORDS_SIZE, 0x2300);
fundokukiri 0:25706db117ec 47
fundokukiri 0:25706db117ec 48 SD_state = sd.WriteBlocks(aTxBuffer, BLOCK_START_ADDR, NUM_OF_BLOCKS, 10000);
fundokukiri 0:25706db117ec 49 /* Đợi cho đến khi thẻ SD sẵn sàng */
fundokukiri 0:25706db117ec 50 while(sd.GetCardState() != SD_TRANSFER_OK){
fundokukiri 0:25706db117ec 51 }
fundokukiri 0:25706db117ec 52
fundokukiri 0:25706db117ec 53 if (SD_state != MSD_OK){
fundokukiri 0:25706db117ec 54 pc.printf("Ghi du lieu len the SD: FAILED.\n\r");
fundokukiri 0:25706db117ec 55 pc.printf("Kiem tra the SD bi huy bo.\n\r");
fundokukiri 0:25706db117ec 56 } else {
fundokukiri 0:25706db117ec 57 pc.printf("Ghi du lieu len the SD: OK.\n\r");
fundokukiri 0:25706db117ec 58 SD_state = sd.ReadBlocks(aRxBuffer, BLOCK_START_ADDR, NUM_OF_BLOCKS, 10000);
fundokukiri 0:25706db117ec 59 /*Đợi cho đến khi thẻ SD sẵn sàng */
fundokukiri 0:25706db117ec 60 while(sd.GetCardState() != SD_TRANSFER_OK){
fundokukiri 0:25706db117ec 61 }
fundokukiri 0:25706db117ec 62
fundokukiri 0:25706db117ec 63 if (SD_state != MSD_OK){
fundokukiri 0:25706db117ec 64 pc.printf("Doc the SD: FAILED.\n\r");
fundokukiri 0:25706db117ec 65 pc.printf("Kiem tra the SD bi huy bo.\n\r");
fundokukiri 0:25706db117ec 66 } else {
fundokukiri 0:25706db117ec 67 pc.printf("Doc the SD: OK.\n\r");
fundokukiri 0:25706db117ec 68 if(Buffercmp(aTxBuffer, aRxBuffer, BUFFER_WORDS_SIZE) > 0){
fundokukiri 0:25706db117ec 69 pc.printf("So sanh the SD: FAILED.\n\r");
fundokukiri 0:25706db117ec 70 pc.printf("Kiem tra the SD bi huy bo.\n\r");
fundokukiri 0:25706db117ec 71 } else {
fundokukiri 0:25706db117ec 72 pc.printf("Kiem tra the SD: OK.\n\r");
fundokukiri 0:25706db117ec 73 pc.printf("Co the go bo the SD.\n\r");
fundokukiri 0:25706db117ec 74 }
fundokukiri 0:25706db117ec 75 }
fundokukiri 0:25706db117ec 76 }
fundokukiri 0:25706db117ec 77 }
fundokukiri 0:25706db117ec 78 }
fundokukiri 0:25706db117ec 79
fundokukiri 0:25706db117ec 80 while (1) {
fundokukiri 0:25706db117ec 81 }
fundokukiri 0:25706db117ec 82 }
fundokukiri 0:25706db117ec 83
fundokukiri 0:25706db117ec 84 /**
fundokukiri 0:25706db117ec 85 * @brief Điền vào bộ đệm với dữ liệu được xác định trước của người dùng
fundokukiri 0:25706db117ec 86 * @param pBuffer: con trỏ trên bộ đệm để điền
fundokukiri 0:25706db117ec 87 * @param uwBufferLenght: kích thước của bộ đệm để điền
fundokukiri 0:25706db117ec 88 * @param uwOffset: giá trị đầu tiên để điền vào bộ đệm
fundokukiri 0:25706db117ec 89 * @retval None
fundokukiri 0:25706db117ec 90 */
fundokukiri 0:25706db117ec 91 static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLength, uint32_t uwOffset)
fundokukiri 0:25706db117ec 92 {
fundokukiri 0:25706db117ec 93 uint32_t tmpIndex = 0;
fundokukiri 0:25706db117ec 94
fundokukiri 0:25706db117ec 95 /* Put in global buffer different values */
fundokukiri 0:25706db117ec 96 for (tmpIndex = 0; tmpIndex < uwBufferLength; tmpIndex++ )
fundokukiri 0:25706db117ec 97 {
fundokukiri 0:25706db117ec 98 pBuffer[tmpIndex] = tmpIndex + uwOffset;
fundokukiri 0:25706db117ec 99 }
fundokukiri 0:25706db117ec 100 }
fundokukiri 0:25706db117ec 101
fundokukiri 0:25706db117ec 102 /**
fundokukiri 0:25706db117ec 103 * @brief So sánh hai bộ đệm
fundokukiri 0:25706db117ec 104 * @param pBuffer1, pBuffer2: bộ đệm được so sánh
fundokukiri 0:25706db117ec 105 * @param BufferLength: chiều dài bộ đệm
fundokukiri 0:25706db117ec 106 * @retval 1: pBuffer identical to pBuffer1
fundokukiri 0:25706db117ec 107 * 0: pBuffer differs from pBuffer1
fundokukiri 0:25706db117ec 108 */
fundokukiri 0:25706db117ec 109 static uint8_t Buffercmp(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength)
fundokukiri 0:25706db117ec 110 {
fundokukiri 0:25706db117ec 111 while (BufferLength--)
fundokukiri 0:25706db117ec 112 {
fundokukiri 0:25706db117ec 113 if (*pBuffer1 != *pBuffer2)
fundokukiri 0:25706db117ec 114 {
fundokukiri 0:25706db117ec 115 return 1;
fundokukiri 0:25706db117ec 116 }
fundokukiri 0:25706db117ec 117
fundokukiri 0:25706db117ec 118 pBuffer1++;
fundokukiri 0:25706db117ec 119 pBuffer2++;
fundokukiri 0:25706db117ec 120 }
fundokukiri 0:25706db117ec 121
fundokukiri 0:25706db117ec 122 return 0;
fundokukiri 0:25706db117ec 123 }
fundokukiri 0:25706db117ec 124
fundokukiri 0:25706db117ec 125