PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل در پخش رنگ سفید به روش fsmc



seyed saeed
11-07-2017, 13:59
سلام
ssd1963 را با میکروی stm32f407vgt6 راه اندازی کردم و از پروتکل fsmc استفاده کردم
تنها مشکلی که وجود داره اگر مثلا در lcd_clear از رنگ تماما سفید استفاده کنم دیگه چیزی کار نمی کنه و رنگ دیگه ای هم پخش نمیشه بعد از سفید
من مقدار رنگ سفید که 0Xffff بود رو به مقدار 0Xfffe تغییر دادم و مشکل حل شد
به نظرتون اشکال از کجاست حتی تصاویری که از sd می خونم اگر بخشی شون سفید رنگ باشه دیگه هیچ چیزی پخش نمی شه
9499
به طور مثال تصویر بالا را مجبور هستم به صورت زیر پخش کنم تا با مشکلی مواجه نشم
9500

mzarkoob
11-07-2017, 14:52
چه مشکل عجیبی!
یکی یکی همه موارد را چک کنید جدا جدا شاید محل ایراد پیدا شد. ال سی دی با برد دیگه . برد با ال سی دی دیگه که مطمئن شوید سخت افزار سالمه. بعد برنامه

seyed saeed
11-07-2017, 18:56
بخشی از مشکل به خاطر پایه ریست 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;
فعلا روی این مقادیر داره کار می کنه ولی برای تصاویر رنگی معمولی مثل قرمز و آبی سریع تر هم گذاشتم

mzarkoob
15-07-2017, 14:39
من برای stm32f103ve که انجام دادم سرعت رفرش این گونه بود:
نمایش عکس از Flash میکرو STM32F103VE (You can see links before reply)
شما هم یک فیلم از سرعت رفرش خود بگذارید بشه مقایسه کرد.

seyed saeed
15-07-2017, 20:24
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:09
در این مواردی که سرعت مهم است توابع واسط را حذف کنید که با حداکثر سرعت ممکن دیتا از sd خوانده شده و روی tft قرار داده شود. این سرعت نمایش در TFT برای خود داستانیست ....
Telegram: Contact @armeducation (You can see links before reply)

seyed saeed
16-07-2017, 10:14
در این مواردی که سرعت مهم است توابع واسط را حذف کنید که با حداکثر سرعت ممکن دیتا از sd خوانده شده و روی tft قرار داده شود. این سرعت نمایش در TFT برای خود داستانیست ....
Telegram: Contact @armeducation (You can see links before reply)



من قبلا خیلی سعی کردم تا sdio رو دستی راه بندازم ولی نشد به همین علت به سمت stmcube رفتم که با اون هم خیلی تجربه کاری ندارم و اصولا کار با توابع cmsis رو هم چندان بلد نیستم
ولی فکر می کنم وقتی پروژه رو در cmsis ساختیم دیگه نمیشه به این راحتی ها کاستومایزش کرد چون خیلی این توابع تو هم تو هم هستند
اگر امکانش هست راهنمایی کنید یا اگر sdio را دستی در این میکرو راه اندازی کردید راهنمایی کنید دیگه با کتابخانه ff راه اندازی کردنش کاری نداره

seyed saeed
17-07-2017, 16:06
این سرعتی هست که خود elm-chan با یه میکروی 72 مگاهرتزی رسیده و فکر می کنم از spi استفاده کرده باشه
You can see links before reply
من الان که حساب می کنم و با اسکوپ چک کردم تقریبا هر 40 کیلو بایت رو تو 7.5 میلی ثانیه می خونم که یعنی تو 1 ثانیه تقریبا 5334 کیلو بایت که از سرعت این میکروی lpc2368 هم ضعیف تر هست

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

mzarkoob
28-07-2017, 19:19
آیا تصویری که از sd کارت خونده و نمایش داده در TFT LCD به صورت فایلی بوده یا سکتوری؟ سکتوری دارای سرعت بیشتری است و توابع واسط برای کار با فایل را دیگر ندارد.

seyed saeed
31-07-2017, 15:56
آیا تصویری که از sd کارت خونده و نمایش داده در TFT LCD به صورت فایلی بوده یا سکتوری؟ سکتوری دارای سرعت بیشتری است و توابع واسط برای کار با فایل را دیگر ندارد.
به صورت فایل است مشخصا از این کتابخانه استفاده می کنیم به لحاظ ارتباط فایلی که وجود دارد
و خود elm-chan هم در عکسی که قبل تر گذاشتم به صورت فایلی سرعت خواندن و نوشتن رو گذاشته

mzarkoob
01-08-2017, 10:27
خوب پس چرا در منوال این طور گفته و در عمل از شما این گونه می شود؟

seyed saeed
01-08-2017, 13:04
خوب پس چرا در منوال این طور گفته و در عمل از شما این گونه می شود؟

نمی دانم هیچ کدام از دوستان هم ظاهرا تست نکرده اند که ببینینم مشکل از کجاست

mzarkoob
01-08-2017, 13:30
من که تست کرده ام و فیلمشم گذاشته ام
نمایش عکس در میکرو stm32f103ve با TFT LCD 7 اینچ (You can see links before reply)
ولی همین سرعتی که دست پیدا کرده اید شما فیلمی نذاشتید

seyed saeed
01-08-2017, 16:27
پخش تصاویر BMP از sd کارت و پخش با FSMC (You can see links before reply)

mzarkoob
01-08-2017, 23:32
این چیه!؟
اینکه پخش فیلمه
با چی انجام شده؟
سرعت نمایش عکس خودتون چطور بوده؟

seyed saeed
02-08-2017, 08:53
این چیه!؟
اینکه پخش فیلمه
با چی انجام شده؟
سرعت نمایش عکس خودتون چطور بوده؟
با یه نرم افزار فیلم رو تبدیل کردم به عکس های bmp بعد دارم پشت سر هم عکس ها رو پخش می کنم
الان تقریبا 17 هرتز رفرش تصاویر هست در سایز 320 در 240