NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 2450 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 17 از 17

موضوع: مشکل در پخش رنگ سفید به روش fsmc

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    May 2017
    نوشته ها
    23
    تشکر
    2
    تشکر شده 7 بار در 3 پست

    پیش فرض مشکل در پخش رنگ سفید به روش fsmc

    سلام
    ssd1963 را با میکروی stm32f407vgt6 راه اندازی کردم و از پروتکل fsmc استفاده کردم
    تنها مشکلی که وجود داره اگر مثلا در lcd_clear از رنگ تماما سفید استفاده کنم دیگه چیزی کار نمی کنه و رنگ دیگه ای هم پخش نمیشه بعد از سفید
    من مقدار رنگ سفید که 0Xffff بود رو به مقدار 0Xfffe تغییر دادم و مشکل حل شد
    به نظرتون اشکال از کجاست حتی تصاویری که از sd می خونم اگر بخشی شون سفید رنگ باشه دیگه هیچ چیزی پخش نمی شه
    1.jpg
    به طور مثال تصویر بالا را مجبور هستم به صورت زیر پخش کنم تا با مشکلی مواجه نشم
    2.jpg

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    چه مشکل عجیبی!
    یکی یکی همه موارد را چک کنید جدا جدا شاید محل ایراد پیدا شد. ال سی دی با برد دیگه . برد با ال سی دی دیگه که مطمئن شوید سخت افزار سالمه. بعد برنامه

  4. #3
    کاربر علاقه مند
    تاریخ عضویت
    May 2017
    نوشته ها
    23
    تشکر
    2
    تشکر شده 7 بار در 3 پست

    پیش فرض

    بخشی از مشکل به خاطر پایه ریست ssd1963 بود وقتی اسیلوسکوپ رو روش گذاشتم خیلی بهتر شد الان براش یه خازن 1 نانو فعلا گذاشتم داره تقریبا کار می کنه ولی نمی تونم سرعت fsmc رو خیلی بالا ببرم

    - - - Updated - - -

    البته زمین اسکوپ رو به زمین مدار وصل می کنم باز بهتر میشه

    تا اینجا که مشخصه نویز دیتا و بقیه پایه ها روی ریست تاثیر میذارن

    فکر می کنید حداکثر سرعتی که می تونم در شرایط ایده ال از fsmc بگیرم چه قدر باشه
    Timing.AddressSetupTime = 0xe;
    Timing.AddressHoldTime = 15;
    Timing.DataSetupTime = 0x12;
    Timing.BusTurnAroundDuration = 0xf;
    Timing.CLKDivision = 16;
    Timing.DataLatency = 17;
    Timing.AccessMode = FSMC_ACCESS_MODE_A;
    فعلا روی این مقادیر داره کار می کنه ولی برای تصاویر رنگی معمولی مثل قرمز و آبی سریع تر هم گذاشتم
    ویرایش توسط seyed saeed : 11-07-2017 در ساعت 19:05

  5. #4

  6. #5
    کاربر علاقه مند
    تاریخ عضویت
    May 2017
    نوشته ها
    23
    تشکر
    2
    تشکر شده 7 بار در 3 پست

    پیش فرض

    Timing.AddressSetupTime = 0x4;
    Timing.AddressHoldTime = 4;
    Timing.DataSetupTime = 0x04;
    Timing.BusTurnAroundDuration = 0xf;
    Timing.CLKDivision = 16;
    Timing.DataLatency = 17;
    Timing.AccessMode = FSMC_ACCESS_MODE_A;
    با این مشخصات عالی کار می کنه
    الان تابع lcd_clear با سرعت تقریبا 20 هرتز رفرش میشه
    ولی عکس های داخل sd card سرعت پایین تری دارن فکر می کردم حداقل به 10 هرتز برسم ولی سرعت خواندن از روی حافظه پایین است با اینکه از sdio در مود 4 بیت استفاده می کنم ولی ظاهرا توابعی که
    در cmsis هست سرعت رو خیلی کاهش میده برای خواندن
    کد:
    HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout) { SDIO_DataInitTypeDef config; uint32_t errorstate = HAL_SD_ERROR_NONE; uint32_t tickstart = HAL_GetTick(); uint32_t count = 0U, *tempbuff = (uint32_t *)pData; if(NULL == pData) { hsd->ErrorCode |= HAL_SD_ERROR_PARAM; return HAL_ERROR; } if(hsd->State == HAL_SD_STATE_READY) { hsd->ErrorCode = HAL_DMA_ERROR_NONE; if((BlockAdd + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) { hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; return HAL_ERROR; } hsd->State = HAL_SD_STATE_BUSY; /* Initialize data control register */ hsd->Instance->DCTRL = 0U; if(hsd->SdCard.CardType != CARD_SDHC_SDXC) { BlockAdd *= 512U; } /* Set Block Size for Card */ errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); if(errorstate != HAL_SD_ERROR_NONE) { /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); hsd->ErrorCode |= errorstate; hsd->State = HAL_SD_STATE_READY; return HAL_ERROR; } /* Configure the SD DPSM (Data Path State Machine) */ config.DataTimeOut = SDMMC_DATATIMEOUT; config.DataLength = NumberOfBlocks * BLOCKSIZE; config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B; config.TransferDir = SDIO_TRANSFER_DIR_TO_SDIO; config.TransferMode = SDIO_TRANSFER_MODE_BLOCK; config.DPSM = SDIO_DPSM_ENABLE; SDIO_ConfigData(hsd->Instance, &config); /* Read block(s) in polling mode */ if(NumberOfBlocks > 1U) { hsd->Context = SD_CONTEXT_READ_MULTIPLE_BLOCK; /* Read Multi Block command */ errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, BlockAdd); } else { hsd->Context = SD_CONTEXT_READ_SINGLE_BLOCK; /* Read Single Block command */ errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, BlockAdd); } if(errorstate != HAL_SD_ERROR_NONE) { /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); hsd->ErrorCode |= errorstate; hsd->State = HAL_SD_STATE_READY; return HAL_ERROR; } /* Poll on SDIO flags */ #ifdef SDIO_STA_STBITERR while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND | SDIO_STA_STBITERR)) #else /* SDIO_STA_STBITERR not defined */ while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND)) #endif /* SDIO_STA_STBITERR */ { if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF)) { /* Read data from SDIO Rx FIFO */ for(count = 0U; count < 8U; count++) { *(tempbuff + count) = SDIO_ReadFIFO(hsd->Instance); } tempbuff += 8U; } if((Timeout == 0U)||((HAL_GetTick()-tickstart) >= Timeout)) { /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; hsd->State= HAL_SD_STATE_READY; return HAL_TIMEOUT; } } /* Send stop transmission command in case of multiblock read */ if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DATAEND) && (NumberOfBlocks > 1U)) { if(hsd->SdCard.CardType != CARD_SECURED) { /* Send stop transmission command */ errorstate = SDMMC_CmdStopTransfer(hsd->Instance); if(errorstate != HAL_SD_ERROR_NONE) { /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); hsd->ErrorCode |= errorstate; hsd->State = HAL_SD_STATE_READY; return HAL_ERROR; } } } /* Get error state */ if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT)) { /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; hsd->State = HAL_SD_STATE_READY; return HAL_ERROR; } else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL)) { /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; hsd->State = HAL_SD_STATE_READY; return HAL_ERROR; } else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR)) { /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; hsd->State = HAL_SD_STATE_READY; return HAL_ERROR; } /* Empty FIFO if there is still any data */ while ((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL))) { *tempbuff = SDIO_ReadFIFO(hsd->Instance); tempbuff++; if((Timeout == 0U)||((HAL_GetTick()-tickstart) >= Timeout)) { /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; hsd->State= HAL_SD_STATE_READY; return HAL_ERROR; } } /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); hsd->State = HAL_SD_STATE_READY; return HAL_OK; } else { hsd->ErrorCode |= HAL_SD_ERROR_BUSY; return HAL_ERROR; } }
    که فکر می کنم بعدش تازه می ره تو کتابخانه chan یا همون ff.c
    ویرایش توسط mzarkoob : 15-07-2017 در ساعت 22:07 دلیل: اصلاح کد

  7. #6
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    در این مواردی که سرعت مهم است توابع واسط را حذف کنید که با حداکثر سرعت ممکن دیتا از sd خوانده شده و روی tft قرار داده شود. این سرعت نمایش در TFT برای خود داستانیست ....

  8. #7
    کاربر علاقه مند
    تاریخ عضویت
    May 2017
    نوشته ها
    23
    تشکر
    2
    تشکر شده 7 بار در 3 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    در این مواردی که سرعت مهم است توابع واسط را حذف کنید که با حداکثر سرعت ممکن دیتا از sd خوانده شده و روی tft قرار داده شود. این سرعت نمایش در TFT برای خود داستانیست ....
    من قبلا خیلی سعی کردم تا sdio رو دستی راه بندازم ولی نشد به همین علت به سمت stmcube رفتم که با اون هم خیلی تجربه کاری ندارم و اصولا کار با توابع cmsis رو هم چندان بلد نیستم
    ولی فکر می کنم وقتی پروژه رو در cmsis ساختیم دیگه نمیشه به این راحتی ها کاستومایزش کرد چون خیلی این توابع تو هم تو هم هستند
    اگر امکانش هست راهنمایی کنید یا اگر sdio را دستی در این میکرو راه اندازی کردید راهنمایی کنید دیگه با کتابخانه ff راه اندازی کردنش کاری نداره

  9. #8
    کاربر علاقه مند
    تاریخ عضویت
    May 2017
    نوشته ها
    23
    تشکر
    2
    تشکر شده 7 بار در 3 پست

    پیش فرض

    این سرعتی هست که خود elm-chan با یه میکروی 72 مگاهرتزی رسیده و فکر می کنم از spi استفاده کرده باشه

    من الان که حساب می کنم و با اسکوپ چک کردم تقریبا هر 40 کیلو بایت رو تو 7.5 میلی ثانیه می خونم که یعنی تو 1 ثانیه تقریبا 5334 کیلو بایت که از سرعت این میکروی lpc2368 هم ضعیف تر هست

  10. #9
    کاربر علاقه مند
    تاریخ عضویت
    May 2017
    نوشته ها
    23
    تشکر
    2
    تشکر شده 7 بار در 3 پست

    پیش فرض

    نکته جالب دیگه ای هم پیدا کردم
    در مطالبی که شرکت st منتشر کرده (AN2790 مربوط به راه اندازی ال سی دی با fsmc و با یک میکروی 72 مگاهرتزی )
    تونسته یک ال سی دی در رزولوشن 320 در 240 راه اندازی کنه و تصویر رو از حافظه های مختلف بخونه و سرعت رفرش تصویر رو برای هر کدام از حافظه ها نوشته
    که برای sd card نوشته 20 هرتز
    من هم اومدم و یک تصویر 320 در 240 پخش کردم با اینکه فرکانس کاری میکرو 168 مگاهرتز هست و تقریبا سرعت دو برابر شده ولی سرعت رفرش من تقریبا 17 هرتز هست
    به نظر میاد که کتابخانه ff.c پیچیدگی های خیلی زیادی داره یا اینکه نکته ای وجود داره که من نمی دانم
    ویرایش توسط seyed saeed : 25-07-2017 در ساعت 14:58

  11. #10
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    آیا تصویری که از sd کارت خونده و نمایش داده در TFT LCD به صورت فایلی بوده یا سکتوری؟ سکتوری دارای سرعت بیشتری است و توابع واسط برای کار با فایل را دیگر ندارد.

  12. #11
    کاربر علاقه مند
    تاریخ عضویت
    May 2017
    نوشته ها
    23
    تشکر
    2
    تشکر شده 7 بار در 3 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    آیا تصویری که از sd کارت خونده و نمایش داده در TFT LCD به صورت فایلی بوده یا سکتوری؟ سکتوری دارای سرعت بیشتری است و توابع واسط برای کار با فایل را دیگر ندارد.
    به صورت فایل است مشخصا از این کتابخانه استفاده می کنیم به لحاظ ارتباط فایلی که وجود دارد
    و خود elm-chan هم در عکسی که قبل تر گذاشتم به صورت فایلی سرعت خواندن و نوشتن رو گذاشته

  13. #12

  14. #13
    کاربر علاقه مند
    تاریخ عضویت
    May 2017
    نوشته ها
    23
    تشکر
    2
    تشکر شده 7 بار در 3 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    خوب پس چرا در منوال این طور گفته و در عمل از شما این گونه می شود؟
    نمی دانم هیچ کدام از دوستان هم ظاهرا تست نکرده اند که ببینینم مشکل از کجاست

  15. #14

  16. #15
    کاربر علاقه مند
    تاریخ عضویت
    May 2017
    نوشته ها
    23
    تشکر
    2
    تشکر شده 7 بار در 3 پست

  17. #16

  18. #17
    کاربر علاقه مند
    تاریخ عضویت
    May 2017
    نوشته ها
    23
    تشکر
    2
    تشکر شده 7 بار در 3 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    این چیه!؟
    اینکه پخش فیلمه
    با چی انجام شده؟
    سرعت نمایش عکس خودتون چطور بوده؟
    با یه نرم افزار فیلم رو تبدیل کردم به عکس های bmp بعد دارم پشت سر هم عکس ها رو پخش می کنم
    الان تقریبا 17 هرتز رفرش تصاویر هست در سایز 320 در 240

  19. تشکرها از این نوشته :


موضوعات مشابه

  1. Stm32مد fsmc
    توسط jonbakhsh در انجمن stm32
    پاسخ: 2
    آخرين نوشته: 11-06-2017, 13:00
  2. SSD1963 + stm32f4 fsmc
    توسط shahin در انجمن stm32
    پاسخ: 3
    آخرين نوشته: 16-06-2016, 15:23
  3. واحد fsmc چیست؟
    توسط ali_rostami_7 در انجمن stm32
    پاسخ: 1
    آخرين نوشته: 25-05-2015, 20:34
  4. راه اندازی ssd1298 با stm32f407 و FSMC
    توسط behnam.sh در انجمن stm32
    پاسخ: 2
    آخرين نوشته: 17-09-2013, 15:05
  5. کار باFSMC (flexible static memory controller)
    توسط farhads در انجمن stm32
    پاسخ: 0
    آخرين نوشته: 28-08-2012, 11:40

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •