SPKT

Dependencies:   SD-DISCO_F746NG BSP-DISCO_F746NG

Committer:
nhancap98
Date:
Mon Jun 10 11:05:23 2019 +0000
Revision:
0:6f972a6c6770
SPKT

Who changed what in which revision?

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