Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

FIFO
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=11659
Страница 1 от 1

Автор:  Vesko [ Чет Авг 22, 2013 8:11 pm ]
Заглавие:  FIFO

Търся си сорс на реализация на ФИФО върху сериен флаш. Размер на един запис 512 байта (256 може би също).

Някой да е срещал готов сорс за това? Или поне теория :)

Автор:  stefan63 [ Пет Авг 23, 2013 7:00 am ]
Заглавие:  Re: FIFO

Каква теория?
Разгледай описанието на един ФИФО чип , помисли си какво ще правиш с данните и почвай.
Като начало ти трябват няколко указателя/поинтера. Трябва ти "ресет пин" - тоест функция, която нулира тези два указателя.
Трябва ти "пин за запълване" - тоест флаг, че разликата между указателя за запис и този за четене е равна на обема на флаша - тоест нов запис ще презапише непрочетени данни. Тогава или трябва да спреш записването на нови данни , или да активираш "ресет пина". Този флаг трябва да се проверява/манипулира при всяка операция на четене или запис.

Трябват ти функции за писане в серийния флаш, които зависят от конкретния чип. Изтриването на флаша по сектори сигурно ще иска време, това пък може да доведе до буфер в РАМа, това пък усложнява всичко допълнително.
Ако приемем ,че ти трябва точно флаш фифо - пътят е някакъв такъв.

Автор:  Vesko [ Пет Авг 23, 2013 8:18 am ]
Заглавие:  Re: FIFO

FIFO горе долу знамкак работи. Въпросът е къде да съхранявам поинтерите, така че при powerloss да не се загубят.

Автор:  Н'бабане Гт'муан'га [ Пет Авг 23, 2013 8:48 am ]
Заглавие:  Re: FIFO

Vesko написа:
FIFO горе долу знамкак работи. Въпросът е къде да съхранявам поинтерите, така че при powerloss да не се загубят.


за такова малко FIFO, ползвай не флаш а EEPROM или още по-добре FRAM. ще си пазиш пойнтерите вътре

Автор:  БатеВаньо [ Пет Авг 23, 2013 8:55 am ]
Заглавие:  Re: FIFO

Най-добре е да не използваш явно записани пойнтери във флаша между две включвания на захранването, а те да се преизчисляват по време на power-up. Причината е, че тези пойнтери биха се презаписвали много по-начесто от данните и ресурсът на запис на тези клетки ще се изчерпи много бързо.
Разбира се, има вариации на темата - напр. редуване на различни клетки за записа им, но има и начини да се мине и без тях при изключване на захранването.
Вариантите за организация на записите могат да бъдат най-различни. Един възможен е към всеки запис да има поле за индикация на валиден запис (CRC) и индекс, който нараства при всеки следващ. При включване се претърсва паметта, за да се намерят валидните записи и да се определи от тях къде е "главата" и къде "опашката" на буфера и да се генерират указатели към тях в RAM-а. След това се работи само с указателите до изключване на захранването. При изваждане на запис от FIFO-то трябва и да го изтриеш от паметта, за да се инвалидира.

Автор:  Vesko [ Пет Авг 23, 2013 9:17 am ]
Заглавие:  Re: FIFO

Това със сканирането на флашасъм си го мислил, но така и още не съм проверил колко време ще ми трябва да сканирам целият флаш.

А еепром или Ффрам къммомента е неприложимо. платките са ми готови :)

Автор:  Cekins [ Пет Авг 23, 2013 10:07 am ]
Заглавие:  Re: FIFO

Аз бих ти предложил и друго решение, ама казваш че вече имаш хардуер, та не знам. Аз много често слагам DS1307 по платките си и с него получавам "екстра" 48 байта рам захранена от батерийката. Когато ползвам клетките за нещо, при power-up проверявам дали имам валидни данни в клетките (дали евентуално не е сменяна батерията примерно) и ако имам си ги ползвам, ако не си ги генерирам. В твоя случай пак си го правиш сканирането ама само когато се смени батерията. Което при консумацията на DS-a от една CR2032 би се наложили чак след 15-20 години...

Автор:  tgi [ Пет Авг 23, 2013 10:22 am ]
Заглавие:  Re: FIFO

Просто двата pointer-а в RAM, а при отпадане на захранването се пишат във
флаша. Това е начинът за такива работи, хардуерът трябва да го може (т.е. да има
сигнализация - най-вероятно някакво прекъсване - като отпадне захранването и кондензатор
за 100-ина милисекунди работа след това).

Автор:  Vesko [ Пет Авг 23, 2013 11:24 am ]
Заглавие:  Re: FIFO

Май не съм предвидил в хардуер-а прекъсване при отпадане на напрежението :( Но входното напрежение все пак стига до АЦП-то ми. А STM32F2-ката май можеше д агенерира прекъсване като напрежението е извън дадени рамки, щего проверя. Отделно имам BateryBackUp клетки в процесора и това с запазването в тях на поинтерите също е изпълнимо :)

Автор:  tgi [ Пет Авг 23, 2013 11:29 am ]
Заглавие:  Re: FIFO

О ако имаш подпрян RAM хич не му се чуди ами ги слагай в него. То и цялото ФИФО
ако се събере там ще е къде по-добре. Някаква чексума за цялата салата та като
излезе от reset процесора да види помни ли валидни данни не помни ли и това е.

Автор:  Vesko [ Пет Авг 23, 2013 3:00 pm ]
Заглавие:  Re: FIFO

Към 3МБ ще ми е фифото. :) Нямам толкова РАМ в СТМ-а

Автор:  stefan63 [ Пет Авг 23, 2013 3:24 pm ]
Заглавие:  Re: FIFO

а флаша ти ако е атмелски ДатаФлаш- маса тревоги ще ти отпаднат;

Автор:  ike [ Пет Авг 23, 2013 5:39 pm ]
Заглавие:  Re: FIFO

Vesko не ти знам проекта, ама с тези 3МБ отиваш към R pi с 3000mAh батерия.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/