اطلاعیه

Collapse
No announcement yet.

سرعت پایین خواندن sd card و پخش تصاویر

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

    سرعت پایین خواندن sd card و پخش تصاویر

    سلام
    چند وقتی است که با میکروی stm32f407gt6 دارم کار می کنم و با کمک واحد FSMC آی سی SSD1963 را راه اندازی کردم و از SD CARD توسط SDIO در مود 4 بیت عکس ها را می خوانم و پخش می کنم
    اما با توجه به اطلاعات و کار های مشابه فهمیدم که سرعت خواندن کمی پایین است البته فکر می کنم به خاطر ملاحظات زیادی که در کتابخانه ff.c شده
    من تجربه زیادی ندارم و کل پروژه و تنظیمات اولیه رو با STMCUBE راه اندازی کردم
    در پروژه مشابهی از سایت خود st با میکروی 72 مگاهرتزی تونسته تصاویر با رزولوشن 320 در 240 پیکسل را با سرعت تقریبی 20 فریم بر ثانیه رفرش کنه
    من هم الان دارم تصاویری با همین ابعاد را پخش می کنم ولی سرعت رفرش من تقریبا 17 هرتز هست در صورتی که میکروی من 168 مگاهرتز کلاک داره به فایل http://www.st.com/resource/en/applic...cd00201397.pdf
    نمی دونم نکته کجاست آیا واقعا توابع تو در توی کتابخانه CHAN باعث کم شدن سرعت شده یا چیز دیگه ای

    این تصویری است که در سایت elm-chan وجود داره با میکرویی که sdio نداره به سرعت بالایی رسیده من برای خودم رو با اسکوپ محاسبه کردم در حدود 5334 کیلو بایت بود
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    پیامبر اکرم(ص):زکات علم نشر آن است.
    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

    #2
    پاسخ : سرعت پایین خواندن sd card و پخش تصاویر

    لطفا یه کلیپ از پروژتون قرار بدید تا بررسی شه
    ضمنا کدی که نوشتید رو قرار بدید
    آرزوی سرافرازی برای ایران عزیز . . .


    دیدگاه


      #3
      پاسخ : سرعت پایین خواندن sd card و پخش تصاویر

      کد:
      [CPP][LEFT][INDENT]/* Includes ------------------------------------------------------------------*/
      #include "main.h"
      #include "stm32f4xx_hal.h"
      #include "fatfs.h"
      #include "lcd.c"
      /* USER CODE BEGIN Includes */
      unsigned long int i;
      /* USER CODE END Includes */
      
      /* Private variables ---------------------------------------------------------*/
      SD_HandleTypeDef hsd;
      
      SRAM_HandleTypeDef hsram1;
      
      /* USER CODE BEGIN PV */
      /* Private variables ---------------------------------------------------------*/
      FRESULT res;
      FATFS SDFatFs;
      FIL myfile;
      char buffwr[30]= "this is test programing\n\r";
      unsigned char buffrd[40960];
      char sdpath[4];
      uint32_t byteswritten,bytesread;
      unsigned int z,q;
      unsigned char *s=buffrd;
      char str[10]="0.bmp";
      /* USER CODE END PV */
      
      /* Private function prototypes -----------------------------------------------*/
      void SystemClock_Config(void);
      static void MX_GPIO_Init(void);
      static void MX_FSMC_Init(void);
      static void MX_SDIO_SD_Init(void);
      
      /* USER CODE BEGIN PFP */
      /* Private function prototypes -----------------------------------------------*/
      void error1(void);
      
      enum _bool{
          false = 0,
          true = 1
          };
      typedef enum _bool boolean;
          
      int main(void)
      {
      
        /* MCU Configuration----------------------------------------------------------*/
      
        /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
        HAL_Init();
      
      SystemClock_Config();
        MX_GPIO_Init();
        MX_FSMC_Init();
        MX_SDIO_SD_Init();
        MX_FATFS_Init();
          LCD_Init();
      
          BSP_SD_Init();
      res = f_mount(&SDFatFs, "",1);
          if (res != FR_OK)
          {
              error1();
          }
          
      q=1;
          sprintf(str,"%d.bmp",q);
          LCD_Clear(White);
          
        while (1)
        {
              res = f_open(&myfile,str,FA_OPEN_ALWAYS|FA_WRITE|FA_READ);
              if (res != FR_OK)
              {
                  LCD_Clear(RED);
                  error1();
              }
              //LCD_Clear(Green);
              res= f_read(&myfile,buffrd,70,&bytesread);
              if (res != FR_OK)
              {
                  LCD_Clear(RED);
                  error1();
              }
      /*320*240*//*************************************************/
          //LCD_WindowMax(160,120,480,360);
          f_read(&myfile,buffrd,15360,&bytesread);
          LCD_DrawPicture(160,120,479,144,s);
          f_read(&myfile,buffrd,15360,&bytesread);
          LCD_DrawPicture(160,144,479,168,s);
          f_read(&myfile,buffrd,15360,&bytesread);
          LCD_DrawPicture(160,168,479,192,s);
          f_read(&myfile,buffrd,15360,&bytesread);
          LCD_DrawPicture(160,192,479,216,s);
          f_read(&myfile,buffrd,15360,&bytesread);
          LCD_DrawPicture(160,216,479,240,s);
          
          f_read(&myfile,buffrd,15360,&bytesread);
          LCD_DrawPicture(160,240,479,264,s);
          f_read(&myfile,buffrd,15360,&bytesread);
          LCD_DrawPicture(160,264,479,288,s);
          f_read(&myfile,buffrd,15360,&bytesread);
          LCD_DrawPicture(160,288,479,312,s);
          f_read(&myfile,buffrd,15360,&bytesread);
          LCD_DrawPicture(160,312,479,336,s);
          f_read(&myfile,buffrd,15360,&bytesread);
          LCD_DrawPicture(160,336,479,360,s);
          
          f_close(&myfile);
          
          q++;
          if(q>1485) q=1;
          sprintf(str,"%d.bmp",q);
      
        }
      
      
      }
      
      /** System Clock Configuration
      */
      void SystemClock_Config(void)
      {
      
        RCC_OscInitTypeDef RCC_OscInitStruct;
        RCC_ClkInitTypeDef RCC_ClkInitStruct;
      
          /**Configure the main internal regulator output voltage 
          */
        __HAL_RCC_PWR_CLK_ENABLE();
      
        __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
      
          /**Initializes the CPU, AHB and APB busses clocks 
          */
        RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
        RCC_OscInitStruct.HSEState = RCC_HSE_ON;
        RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
        RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
        RCC_OscInitStruct.PLL.PLLM = 12;
        RCC_OscInitStruct.PLL.PLLN = 336;
        RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
        RCC_OscInitStruct.PLL.PLLQ = 7;
        if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
        {
          _Error_Handler(__FILE__, __LINE__);
        }
      
          /**Initializes the CPU, AHB and APB busses clocks 
          */
        RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                    |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
        RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
        RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
        RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
        RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
      
        if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
        {
          _Error_Handler(__FILE__, __LINE__);
        }
      
          /**Configure the Systick interrupt time 
          */
        HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
      
          /**Configure the Systick 
          */
        HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
      
        /* SysTick_IRQn interrupt configuration */
        HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
      }
      
      /* SDIO init function */
      static void MX_SDIO_SD_Init(void)
      {
      
        hsd.Instance = SDIO;
        hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
        hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
        hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
        hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
        hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
        hsd.Init.ClockDiv = 0;
      
      }
      
      /** Configure pins as 
              * Analog 
              * Input 
              * Output
              * EVENT_OUT
              * EXTI
      */
      static void MX_GPIO_Init(void)
      {
      
        GPIO_InitTypeDef GPIO_InitStruct;
      
        /* GPIO Ports Clock Enable */
        __HAL_RCC_GPIOH_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();
        __HAL_RCC_GPIOE_CLK_ENABLE();
        __HAL_RCC_GPIOD_CLK_ENABLE();
        __HAL_RCC_GPIOC_CLK_ENABLE();
      
        /*Configure GPIO pin Output Level */
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
      
        /*Configure GPIO pin : PA4 */
        GPIO_InitStruct.Pin = GPIO_PIN_4;
        GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
        GPIO_InitStruct.Pull = GPIO_PULLUP;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
      
      }
      
      /* FSMC initialization function */
      static void MX_FSMC_Init(void)
      {
        FSMC_NORSRAM_TimingTypeDef Timing;
      
        /** Perform the SRAM1 memory initialization sequence
        */
        hsram1.Instance = FSMC_NORSRAM_DEVICE;
        hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
        /* hsram1.Init */
        hsram1.Init.NSBank = FSMC_NORSRAM_BANK1;
        hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
        hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
        hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
        hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
        hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
        hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
        hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
        hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
        hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
        hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;
        hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
        hsram1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
        hsram1.Init.PageSize = FSMC_PAGE_SIZE_NONE;
        /* Timing */
        Timing.AddressSetupTime = 0x4;
        Timing.AddressHoldTime = 0;
        Timing.DataSetupTime = 0x04;
        Timing.BusTurnAroundDuration = 0xf;
        Timing.CLKDivision = 15;
        Timing.DataLatency = 17;
        Timing.AccessMode = FSMC_ACCESS_MODE_A;
        /* ExtTiming */
      
        if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
        {
          _Error_Handler(__FILE__, __LINE__);
        }
      
      }
      
      /* USER CODE BEGIN 4 */
      void error1()
      {
          while(1);
      }
      /* USER CODE END 4 */
      
      /**
        * @brief  This function is executed in case of error occurrence.
        * @[URL="http://www.eca.ir/forums/member.php?u=17545"]para[/URL]m  None
        * @retval None
        */
      void _Error_Handler(char * file, int line)
      {
        /* USER CODE BEGIN Error_Handler_Debug */
        /* User can add his own implementation to report the HAL error return state */
        while(1) 
        {
        }
        /* USER CODE END Error_Handler_Debug */ 
      }
      
      #ifdef USE_FULL_ASSERT
      
      /**
         * @brief Reports the name of the source file and the source line number
         * where the assert_param error has occurred.
         * @[URL="http://www.eca.ir/forums/member.php?u=17545"]para[/URL]m file: pointer to the source file name
         * @[URL="http://www.eca.ir/forums/member.php?u=17545"]para[/URL]m line: assert_param error line source number
         * @retval None
         */
      void assert_failed(uint8_t* file, uint32_t line)
      {
        /* USER CODE BEGIN 6 */
        /* User can add his own implementation to report the file name and line number,
          ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
        /* USER CODE END 6 */
      
      }
      
      #endif
      
      /**
        * @}
        */ 
      
      /**
        * @}
      */ 
      
      /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
      
      [/INDENT]
      [/LEFT]
      
      [/CPP]
      جدیدترین ویرایش توسط اشکان غفارزاده; ۱۵:۳۹ ۱۳۹۶/۰۵/۰۳.
      اللهم صل علی محمد و ال محمد و عجل فرجهم
      پیامبر اکرم(ص):زکات علم نشر آن است.
      در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

      دیدگاه


        #4
        پاسخ : سرعت پایین خواندن sd card و پخش تصاویر

        سلام، سرعت پایین ارتباط با sd معمولا به توابع سطح پایین که برای دسترسی به مموری نوشته شده برمیگرده. مورد دیگه هم که در کد شما دیدم اینه که تعداد بایت هایی که هربار میخونید 15360 تاست، اگر تعداد بایت هایی که میخونید توانی از 2 باشه سرعت بالاتر میره، چرا به اندازه طول بافری که در نظر گرفتید (40 کیلوبایت) نمیخونید؟

        دیدگاه


          #5
          پاسخ : سرعت پایین خواندن sd card و پخش تصاویر

          نوشته اصلی توسط gordany نمایش پست ها
          سلام، سرعت پایین ارتباط با sd معمولا به توابع سطح پایین که برای دسترسی به مموری نوشته شده برمیگرده. مورد دیگه هم که در کد شما دیدم اینه که تعداد بایت هایی که هربار میخونید 15360 تاست، اگر تعداد بایت هایی که میخونید توانی از 2 باشه سرعت بالاتر میره، چرا به اندازه طول بافری که در نظر گرفتید (40 کیلوبایت) نمیخونید؟
          از توان 2 برای اینکه نسبتی پیدا نکردم که بتونم راحت نمایششون بدم 15360 بایت میشه 15 کیلو که چون تصاویر 16 بیتی است برابر با 320 در 24 پیکسل از نمایشگر میشه
          خب با این توابع سطح پایین که اشاره کردید باید چی کار کرد
          دیگه فکر می کنم elm-chan هر چه قدر می تونسته ساده کرده
          اگر توجه داشته باشید در عکسی که بالا گذاشتم
          با میکرویی که spi دارد به سرعت بیش تری رسیدن یعنی توابع مورد استفاده یکی است ولی نکته در کجاست معلوم نیست آیا توابع مربوط به sdio خیلی پیچیده است نمی دانم اگر قرار باشد sdio از spi
          ضعیف تر عمل کند با یک کتابخانه و تازه سرعت پردازنده بالاتر هم باشد دیگه نمی دانم باید چی بگم
          اللهم صل علی محمد و ال محمد و عجل فرجهم
          پیامبر اکرم(ص):زکات علم نشر آن است.
          در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

          دیدگاه


            #6
            پاسخ : سرعت پایین خواندن sd card و پخش تصاویر

            توابع سطح پایین (Low Level) جزو کتابخانه fat نیست، اینا رو باید خودتون پیاده سازی کنید. که در مورد شما فک کنم نرم افزار cube mx براتون پیاده سازی میکنه، و احتمالا بهینه نیست. یه فایل توی پروژتون باید باشه احتمالا به اسم diskio.c اون رو باید بررسی کنید. و درنهایت سرعت sdio باید خیلی بیشتر از spi باشه.

            دیدگاه


              #7
              پاسخ : سرعت پایین خواندن sd card و پخش تصاویر

              /*-----------------------------------------------------------------------*/
              /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2014 */
              /* */
              /* Portions COPYRIGHT 2017 STMicroelectronics */
              /* Portions Copyright (C) 2014, ChaN, all right reserved */
              /*-----------------------------------------------------------------------*/
              /* If a working storage control module is available, it should be */
              /* attached to the FatFs via a glue function rather than modifying it. */
              /* This is an example of glue functions to attach various exsisting */
              /* storage control modules to the FatFs module with a defined API. */
              /*-----------------------------------------------------------------------*/

              /**
              ************************************************** ****************************
              * @file diskio.c
              * [MENTION=19064]autho[/MENTION]r MCD Application Team
              * @version V1.4.1
              * @date 14-February-2017
              * @brief FatFs low level disk I/O module.
              ************************************************** ****************************
              * @attention
              *
              *
              * Redistribution and use in source and binary forms, with or without
              * modification, are permitted, provided that the following conditions are met:
              *
              * 1. Redistribution of source code must retain the above copyright notice,
              * this list of conditions and the following disclaimer.
              * 2. Redistributions in binary form must reproduce the above copyright notice,
              * this list of conditions and the following disclaimer in the documentation
              * and/or other materials provided with the distribution.
              * 3. Neither the name of STMicroelectronics nor the names of other
              * contributors to this software may be used to endorse or promote products
              * derived from this software without specific written permission.
              * 4. This software, including modifications and/or derivative works of this
              * software, must execute solely and exclusively on microcontroller or
              * microprocessor devices manufactured by or for STMicroelectronics.
              * 5. Redistribution and use of this software other than as permitted under
              * this license is void and will automatically terminate your rights under
              * this license.
              *
              * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
              * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
              * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
              * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
              * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
              * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
              * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
              * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
              * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
              * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
              * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
              * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
              *
              ************************************************** ****************************
              */

              /* Includes ------------------------------------------------------------------*/
              #include "diskio.h"
              #include "ff_gen_drv.h"

              /* Private typedef -----------------------------------------------------------*/
              /* Private define ------------------------------------------------------------*/
              /* Private variables ---------------------------------------------------------*/
              extern Disk_drvTypeDef disk;

              /* Private function prototypes -----------------------------------------------*/
              /* Private functions ---------------------------------------------------------*/

              /**
              * @brief Gets Disk Status
              * [MENTION=17545]para[/MENTION]m pdrv: Physical drive number (0..)
              * @retval DSTATUS: Operation status
              */
              DSTATUS disk_status (
              BYTE pdrv /* Physical drive nmuber to identify the drive */
              )
              {
              DSTATUS stat;

              stat = disk.drv[pdrv]->disk_status(disk.lun[pdrv]);
              return stat;
              }

              /**
              * @brief Initializes a Drive
              * [MENTION=17545]para[/MENTION]m pdrv: Physical drive number (0..)
              * @retval DSTATUS: Operation status
              */
              DSTATUS disk_initialize (
              BYTE pdrv /* Physical drive nmuber to identify the drive */
              )
              {
              DSTATUS stat = RES_OK;

              if(disk.is_initialized[pdrv] == 0)
              {
              disk.is_initialized[pdrv] = 1;
              stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]);
              }
              return stat;
              }

              /**
              * @brief Reads Sector(s)
              * [MENTION=17545]para[/MENTION]m pdrv: Physical drive number (0..)
              * [MENTION=17545]para[/MENTION]m *buff: Data buffer to store read data
              * [MENTION=17545]para[/MENTION]m sector: Sector address (LBA)
              * [MENTION=17545]para[/MENTION]m count: Number of sectors to read (1..128)
              * @retval DRESULT: Operation result
              */
              DRESULT disk_read (
              BYTE pdrv, /* Physical drive nmuber to identify the drive */
              BYTE *buff, /* Data buffer to store read data */
              DWORD sector, /* Sector address in LBA */
              UINT count /* Number of sectors to read */
              )
              {
              DRESULT res;

              res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count);
              return res;
              }

              /**
              * @brief Writes Sector(s)
              * [MENTION=17545]para[/MENTION]m pdrv: Physical drive number (0..)
              * [MENTION=17545]para[/MENTION]m *buff: Data to be written
              * [MENTION=17545]para[/MENTION]m sector: Sector address (LBA)
              * [MENTION=17545]para[/MENTION]m count: Number of sectors to write (1..128)
              * @retval DRESULT: Operation result
              */
              #if _USE_WRITE == 1
              DRESULT disk_write (
              BYTE pdrv, /* Physical drive nmuber to identify the drive */
              const BYTE *buff, /* Data to be written */
              DWORD sector, /* Sector address in LBA */
              UINT count /* Number of sectors to write */
              )
              {
              DRESULT res;

              res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count);
              return res;
              }
              #endif /* _USE_WRITE == 1 */

              /**
              * @brief I/O control operation
              * [MENTION=17545]para[/MENTION]m pdrv: Physical drive number (0..)
              * [MENTION=17545]para[/MENTION]m cmd: Control code
              * [MENTION=17545]para[/MENTION]m *buff: Buffer to send/receive control data
              * @retval DRESULT: Operation result
              */
              #if _USE_IOCTL == 1
              DRESULT disk_ioctl (
              BYTE pdrv, /* Physical drive nmuber (0..) */
              BYTE cmd, /* Control code */
              void *buff /* Buffer to send/receive control data */
              )
              {
              DRESULT res;

              res = disk.drv[pdrv]->disk_ioctl(disk.lun[pdrv], cmd, buff);
              return res;
              }
              #endif /* _USE_IOCTL == 1 */

              /**
              * @brief Gets Time from RTC
              * [MENTION=17545]para[/MENTION]m None
              * @retval Time in DWORD
              */
              __weak DWORD get_fattime (void)
              {
              return 0;
              }

              /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
              این هم کتابخانه مورد نظر
              من که چیزی متوجه نشدم
              اللهم صل علی محمد و ال محمد و عجل فرجهم
              پیامبر اکرم(ص):زکات علم نشر آن است.
              در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

              دیدگاه


                #8
                پاسخ : سرعت پایین خواندن sd card و پخش تصاویر

                من با میکرو F407 تست کردم اخرین سرعتی که با SDCARD معمولی رسیدم 6 مگ برای خوندن و 1 برای نوشتن روی دیسک بود.
                حجم بافر 64 کیلو بایت بود، تو مد SPI خیلی از پارامترها کنترلی رو چک نمیکنه برای همین سرعت بیشتره اما رابط SDIO مطمعن تره.

                دیدگاه


                  #9
                  پاسخ : سرعت پایین خواندن sd card و پخش تصاویر

                  نوشته اصلی توسط محمد پورخلیلی نمایش پست ها
                  من با میکرو F407 تست کردم اخرین سرعتی که با SDCARD معمولی رسیدم 6 مگ برای خوندن و 1 برای نوشتن روی دیسک بود.
                  حجم بافر 64 کیلو بایت بود، تو مد SPI خیلی از پارامترها کنترلی رو چک نمیکنه برای همین سرعت بیشتره اما رابط SDIO مطمعن تره.
                  شما با spi چک کردید ؟؟ !!!!
                  اگر با spi به این سرعت رسیدید یعنی خیلی سرعتتون بیش تر از sdio هست
                  کتابخانه ff رو از stmcube تنظیم کردید یا دستی وارد برنامه کردید ؟؟؟
                  اللهم صل علی محمد و ال محمد و عجل فرجهم
                  پیامبر اکرم(ص):زکات علم نشر آن است.
                  در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

                  دیدگاه


                    #10
                    پاسخ : سرعت پایین خواندن sd card و پخش تصاویر

                    مشکل اصلی سرعت پخش رو پیدا کردم دستور sprintf که در برنامه استفاده کردم نزدیک به 16 میلی ثانیه طول می کشه برای اینکه عکس های بعدی رو فراخوانی کنم نامشون رو با دستور sprintf(str,"%d.bmp",q); به رشته تبدیل می کنم این دستور رو که برداشتم و در حلقه while تنها یک عکس پخش شد روی اسیلوسکوپ چک کردم نزدیک به 16 میلی ثانیه روند خواندن و پخش تصاویر بیش تر میشه امتحان کردم هر چه قدر شماره عکس مورد نظر بالاتر میره این دستور کند تر اجرا میشه و برای تبدیل به رشته زمان بیش تر طول می کشه که خب طبیعی است ولی به نظر میاد این زمان خیلی زمان زیادی باشه من الان 1400 عکس دارم پخش می کنم
                    جدیدترین ویرایش توسط seyed saeed; ۱۴:۳۸ ۱۳۹۶/۰۶/۰۴.
                    اللهم صل علی محمد و ال محمد و عجل فرجهم
                    پیامبر اکرم(ص):زکات علم نشر آن است.
                    در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

                    دیدگاه


                      #11
                      پاسخ : سرعت پایین خواندن sd card و پخش تصاویر

                      اشتباه کردم مشکل رو f_open ایجاد می کنه هر چی عکس مورد نظر رقمش بالاتر می ره برای پیدا کردنش و باز کردنش مدت طولانی تری طول می کشه
                      الان مثلا برای پیدا کردن و باز کردن عکس 1400 نزدیک به40 میلی ثانیه طول می کشه ولی برای عکس های ابتدایی خیلی سریع تر این کار رو می کنه شاید در حدود 1 میلی ثانیه
                      آیا روشی وجود داره که فایل ها رو به ترتیب و پشت سرهم خواند تا این مشکل رفع شود
                      اللهم صل علی محمد و ال محمد و عجل فرجهم
                      پیامبر اکرم(ص):زکات علم نشر آن است.
                      در کشور هاي غربي انتقال تجربيات و دانش به افراد مبتدي يک پيشرفت محسوب شده و به آن مديريت دانش مي گويند. ولي متاسفانه اين فرهنگ هنوز در کشور ايران رايج نشده است !!!

                      دیدگاه

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