اطلاعیه

Collapse
No announcement yet.

مشکل در SDIO (گیر کردن در دستور f_mount)

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در SDIO (گیر کردن در دستور f_mount)

    با سلام خدمت دوستان.

    بنده از روی این آموزش:



    سعی کردم که توی یه میکرو اس دی فایل بنویسم/بخونم که متاسفانه موفق نشدم... بار اولی هم هست که می*خوام این کارو انجام بدم. مشکل اینجاست که چه اس دی کارت وصل باشه چه نباشه وقتی به دستور f_mount می*رسه کلا گیر می*کنه...

    می*خواستم ببینم کسی این مشکل تا حالا واسش پیش اومده یا نه.

    اگه آموزش بهتری سراغ دارین که خودتون ازش استفاده کردید و جواب گرفتید ممنون می*شم معرفی کنید.
    خیلی ممنون.
    در ضمن میکرویی که استفاده می*کنم f207vct6 هستش.

    #2
    پاسخ : مشکل در SDIO (گیر کردن در دستور f_mount)

    نوشته اصلی توسط ReMadza نمایش پست ها
    با سلام خدمت دوستان.

    بنده از روی این آموزش:



    سعی کردم که توی یه میکرو اس دی فایل بنویسم/بخونم که متاسفانه موفق نشدم... بار اولی هم هست که می*خوام این کارو انجام بدم. مشکل اینجاست که چه اس دی کارت وصل باشه چه نباشه وقتی به دستور f_mount می*رسه کلا گیر می*کنه...

    می*خواستم ببینم کسی این مشکل تا حالا واسش پیش اومده یا نه.

    اگه آموزش بهتری سراغ دارین که خودتون ازش استفاده کردید و جواب گرفتید ممنون می*شم معرفی کنید.
    خیلی ممنون.
    در ضمن میکرویی که استفاده می*کنم f207vct6 هستش.
    سلام
    گیر میکنه؟ مطمئنید گیر میکنه؟ معمولا این تابع اگر موفق نشه با مقدار بازگشتی نشون میده موفق نشده.

    دیدگاه


      #3
      پاسخ : مشکل در SDIO (گیر کردن در دستور f_mount)

      نوشته اصلی توسط hossein.m98 نمایش پست ها
      سلام
      گیر میکنه؟ مطمئنید گیر میکنه؟ معمولا این تابع اگر موفق نشه با مقدار بازگشتی نشون میده موفق نشده.
      آره.
      یه ال ای دی توی مدار دارم که قبل ورود به این دستورات 50 میلی ثانیه روشنش می*کنم و بعد از خروج 500 میلی ثانیه. قبل از ورود روشن می*شه ولی بعد از اون اتفاقی نمیوفته.

      دیدگاه


        #4
        پاسخ : مشکل در SDIO (گیر کردن در دستور f_mount)

        نوشته اصلی توسط ReMadza نمایش پست ها
        آره.
        یه ال ای دی توی مدار دارم که قبل ورود به این دستورات 50 میلی ثانیه روشنش می*کنم و بعد از خروج 500 میلی ثانیه. قبل از ورود روشن می*شه ولی بعد از اون اتفاقی نمیوفته.
        کد اون قسمتی که این تابع رو به کار بردید اینجا قرار بدید.

        دیدگاه


          #5
          پاسخ : مشکل در SDIO (گیر کردن در دستور f_mount)

          نوشته اصلی توسط hossein.m98 نمایش پست ها
          کد اون قسمتی که این تابع رو به کار بردید اینجا قرار بدید.
          بفرمایید:
          کد:
          HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
              HAL_Delay(50);
              HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
              HAL_Delay(500);
              
              FATFS myFATFS;
              FIL myFILE;
              UINT testBYTE;
              
              if(f_mount(&myFATFS, SDPath, 1) == FR_OK)
              {
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                  HAL_Delay(50);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                  HAL_Delay(50);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                  HAL_Delay(50);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                  HAL_Delay(50);
                  
                  char myPATH[] = "TEXT.txt\0";
                  char myDATA[] = "This is the first text\0";
                  f_open(&myFILE, myPATH, FA_WRITE | FA_CREATE_ALWAYS);
                  f_write(&myFILE, myDATA, sizeof(myDATA), &testBYTE);
                  f_close(&myFILE);
                  
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                  HAL_Delay(50);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                  HAL_Delay(50);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                  HAL_Delay(50);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                  HAL_Delay(500);
              }
              HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
          طوری نوشتم که اگر وارد شرط f_mount شد led با فاصله 50 میلی ثانیه دوبار روشن خاموش بشه و اگر نشد یک بار با زمان روشن بشه و ورشن بمونه. ولی هیچ کدوم نمیشه.
          جدیدترین ویرایش توسط ReMadza; ۰۱:۳۰ ۱۳۹۹/۰۴/۳۰.

          دیدگاه


            #6
            پاسخ : مشکل در SDIO (گیر کردن در دستور f_mount)

            نوشته اصلی توسط ReMadza نمایش پست ها
            بفرمایید:
            کد:
            HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                HAL_Delay(50);
                HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                HAL_Delay(500);
                
                FATFS myFATFS;
                FIL myFILE;
                UINT testBYTE;
                
                if(f_mount(&myFATFS, SDPath, 1) == FR_OK)
                {
                    HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                    HAL_Delay(50);
                    HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                    HAL_Delay(50);
                    HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                    HAL_Delay(50);
                    HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                    HAL_Delay(50);
                    
                    char myPATH[] = "TEXT.txt\0";
                    char myDATA[] = "This is the first text\0";
                    f_open(&myFILE, myPATH, FA_WRITE | FA_CREATE_ALWAYS);
                    f_write(&myFILE, myDATA, sizeof(myDATA), &testBYTE);
                    f_close(&myFILE);
                    
                    HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                    HAL_Delay(50);
                    HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                    HAL_Delay(50);
                    HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                    HAL_Delay(50);
                    HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                    HAL_Delay(500);
                }
                HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
            طوری نوشتم که اگر وارد شرط f_mount شد led با فاصله 50 میلی ثانیه دوبار روشن خاموش بشه و اگر نشد یک بار با زمان روشن بشه و ورشن بمونه. ولی هیچ کدوم نمیشه.
            اول این که یکم تاخیر ها رو زیاد کنید که به چشم بیاد. 50 میلی ثانیه یکم کمه.
            کد شما رو یه تغییرات که بهتره تستش کنید. از روی نوع چشمک زدن میتونید تشخیص بدید درست کار میکنه یا نه. بهتره برای دیباگ کردن از پورت سریال استفاده کنید و جاهای مختلف داده ای به سریال بفرستید که بشه فهمید مشکل دقیقا از کجاس.
            کد:
            HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
            HAL_Delay(200);
            HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
            HAL_Delay(500);
            
            
            FATFS myFATFS;
            FIL myFILE;
            UINT testBYTE;
            
            
            if(f_mount(&myFATFS, "", 1) == FR_OK)
            {
            	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
            	HAL_Delay(200);
            	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
            	HAL_Delay(200);
            	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
            	HAL_Delay(200);
            	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
            	HAL_Delay(200);
            	
            	char myPATH[] = "TEXT.txt";
            	char myDATA[] = "This is the first text";
            	f_open(&myFILE, myPATH, FA_WRITE | FA_CREATE_ALWAYS);
            	f_write(&myFILE, myDATA, sizeof(myDATA), &testBYTE);
            	f_close(&myFILE);
            	
            	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
            	HAL_Delay(200);
            	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
            	HAL_Delay(200);
            	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
            	HAL_Delay(200);
            	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
            	HAL_Delay(500);
            }
            else
            {
            	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
            	HAL_Delay(200);
            	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
            	HAL_Delay(200);
            }
            HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);

            دیدگاه


              #7
              پاسخ : مشکل در SDIO (گیر کردن در دستور f_mount)

              نوشته اصلی توسط hossein.m98 نمایش پست ها
              اول این که یکم تاخیر ها رو زیاد کنید که به چشم بیاد. 50 میلی ثانیه یکم کمه.
              کد شما رو یه تغییرات که بهتره تستش کنید. از روی نوع چشمک زدن میتونید تشخیص بدید درست کار میکنه یا نه. بهتره برای دیباگ کردن از پورت سریال استفاده کنید و جاهای مختلف داده ای به سریال بفرستید که بشه فهمید مشکل دقیقا از کجاس.
              کد:
              HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
              HAL_Delay(200);
              HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
              HAL_Delay(500);
              
              
              FATFS myFATFS;
              FIL myFILE;
              UINT testBYTE;
              
              
              if(f_mount(&myFATFS, "", 1) == FR_OK)
              {
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                  HAL_Delay(200);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                  HAL_Delay(200);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                  HAL_Delay(200);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                  HAL_Delay(200);
                  
                  char myPATH[] = "TEXT.txt";
                  char myDATA[] = "This is the first text";
                  f_open(&myFILE, myPATH, FA_WRITE | FA_CREATE_ALWAYS);
                  f_write(&myFILE, myDATA, sizeof(myDATA), &testBYTE);
                  f_close(&myFILE);
                  
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                  HAL_Delay(200);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                  HAL_Delay(200);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                  HAL_Delay(200);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                  HAL_Delay(500);
              }
              else
              {
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
                  HAL_Delay(200);
                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
                  HAL_Delay(200);
              }
              HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);

              خیلی ممنون.
              مشکل این بود که من صبرم کم بود... از قرار معلوم باید 40 ثانیه صبر کرد تا از f_mount خارج بشه...
              ولی خب.. مشکل من هنوز پا برجاست و نمی تونم دیتایی توی اس دی کارت بنویسم.
              مدار هم به شکل زیر ـه:



              (برای اتصال 4 سیم... که اونم امتحان کردم همین مشکل رو داشت) چیزی کم و کسر نداره مدار؟
              اس دی کارت هم فرمتش fat32 هست.
              جدیدترین ویرایش توسط ReMadza; ۲۱:۰۱ ۱۳۹۹/۰۴/۳۰.

              دیدگاه


                #8
                پاسخ : مشکل در SDIO (گیر کردن در دستور f_mount)

                نوشته اصلی توسط ReMadza نمایش پست ها
                خیلی ممنون.
                مشکل این بود که من صبرم کم بود... از قرار معلوم باید 40 ثانیه صبر کرد تا از f_mount خارج بشه...
                ولی خب.. مشکل من هنوز پا برجاست و نمی تونم دیتایی توی اس دی کارت بنویسم.
                مدار هم به شکل زیر ـه:



                (برای اتصال 4 سیم... که اونم امتحان کردم همین مشکل رو داشت) چیزی کم و کسر نداره مدار؟
                اس دی کارت هم فرمتش fat32 هست.
                40 ثانیه که خیلی زیاده! شما بیایید کلاک SDIO رو یکمی کم کنید و تست بگیرید. مدارم فکر نمیکنم مشکلی داشته باشه. تنها مشکلی که میتونه باشه اتصالات نا مناسبه.

                دیدگاه


                  #9
                  پاسخ : مشکل در SDIO (گیر کردن در دستور f_mount)

                  سلام دوستان
                  من هم یک مشکل مشابه دارم لطفا اگر کسی میتونه کمکم کنه.
                  من یک micro SD Card را مشابه اتصالات دوستمون که در قسمت بالا گذاشت به یک میکرو STM32F103RC متصل کردم و با استفاده از SDIO 4 wire میخوام روی اس دی کارت بنویسم. ولی متاسفانه هرکاری میکنم mount نمی شه. توی تابع f_mount گیر نمیکنه ولی خروجی f_mount نا موفق می شه و نمیتونم روی اس دی کارت چیزی بنویسم. کسی ایده ای داره مشکل میتونه از کجا باشه. ممنون

                  دیدگاه


                    #10
                    پاسخ : مشکل در SDIO (گیر کردن در دستور f_mount)

                    نوشته اصلی توسط mjnjt نمایش پست ها
                    سلام دوستان
                    من هم یک مشکل مشابه دارم لطفا اگر کسی میتونه کمکم کنه.
                    من یک micro SD Card را مشابه اتصالات دوستمون که در قسمت بالا گذاشت به یک میکرو STM32F103RC متصل کردم و با استفاده از SDIO 4 wire میخوام روی اس دی کارت بنویسم. ولی متاسفانه هرکاری میکنم mount نمی شه. توی تابع f_mount گیر نمیکنه ولی خروجی f_mount نا موفق می شه و نمیتونم روی اس دی کارت چیزی بنویسم. کسی ایده ای داره مشکل میتونه از کجا باشه. ممنون
                    سلام
                    دوستانی که این تاپیک رو میخونن، یه موردی که شاید کسی بهش توجه نکنه پایه detect هستش که توی cube باید به برنامه معرفیش کنید. این پایه به صورت pull up هستش و با اتصال کارت حافظه باید سطح منطقی 0 به خودش بگیره تا برنامه متوجه بشه کارت حافظه وارد دستگاه شده. البته اگر قصد استفاده از همچین پایه ای به شکل عملی ندارید، میتونید توی فایل fatfs_platform.c ، تابع BSP_PlatformIsDetected رو به شکل زیر اصلاح کنید که برنامه همیشه کارت حافظه رو متصل شده در نظر بگیره:

                    uint8_t BSP_PlatformIsDetected(void) {
                    uint8_t status = SD_PRESENT;
                    /* Check SD card detect pin */
                    if(HAL_GPIO_ReadPin(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) != GPIO_PIN_RESET)
                    {
                    status = SD_NOT_PRESENT;
                    }
                    /* USER CODE BEGIN 1 */
                    /* user code can be inserted here */
                    status = SD_PRESENT;
                    /* USER CODE END 1 */
                    return status;
                    }

                    این مورد رو گفتم که شاید مشکل کسی رو حل کنه و لزوما منظورم مشکل شمایی که نقل قول کردم نیست. شما بهتره بگید کدوم ارور رو برمیگردونه تا اگر بشه بیشتر راهنماییتون کرد.

                    دیدگاه


                      #11
                      پاسخ : مشکل در SDIO (گیر کردن در دستور f_mount)

                      نوشته اصلی توسط hossein.m98 نمایش پست ها
                      سلام
                      دوستانی که این تاپیک رو میخونن، یه موردی که شاید کسی بهش توجه نکنه پایه detect هستش که توی cube باید به برنامه معرفیش کنید. این پایه به صورت pull up هستش و با اتصال کارت حافظه باید سطح منطقی 0 به خودش بگیره تا برنامه متوجه بشه کارت حافظه وارد دستگاه شده. البته اگر قصد استفاده از همچین پایه ای به شکل عملی ندارید، میتونید توی فایل fatfs_platform.c ، تابع BSP_PlatformIsDetected رو به شکل زیر اصلاح کنید که برنامه همیشه کارت حافظه رو متصل شده در نظر بگیره:

                      uint8_t BSP_PlatformIsDetected(void) {
                      uint8_t status = SD_PRESENT;
                      /* Check SD card detect pin */
                      if(HAL_GPIO_ReadPin(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) != GPIO_PIN_RESET)
                      {
                      status = SD_NOT_PRESENT;
                      }
                      /* USER CODE BEGIN 1 */
                      /* user code can be inserted here */
                      status = SD_PRESENT;
                      /* USER CODE END 1 */
                      return status;
                      }

                      این مورد رو گفتم که شاید مشکل کسی رو حل کنه و لزوما منظورم مشکل شمایی که نقل قول کردم نیست. شما بهتره بگید کدوم ارور رو برمیگردونه تا اگر بشه بیشتر راهنماییتون کرد.
                      خیلی ممنون
                      مشکل من دقیقا همین مورد بود که برطرف شد. با تشکر

                      دیدگاه

                      لطفا صبر کنید...
                      X