<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=3159&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-03-11T13:08:52+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3159&amp;mode</id>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2014-03-11T13:08:52+01:00</updated>
<published>2014-03-11T13:08:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=73846#p73846</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=73846#p73846"/>
<title type="html"><![CDATA[Re: FatFS + karta SDHC - odczyt ponad 512B]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=73846#p73846"><![CDATA[
Ostatnio wróciłem do zabawy i poniekąd rozwiązałem problem. Może komuś się przyda. Błąd oczywiście nie tkwił w samym FatFS tylko w sprzętowej/niskopoziomowej warstwie programu. Wadliwie działała funkcja czytająca kilka bloków z karty na raz. Unieszkodliwienie warunku, które opisałem w pierwszym poście nie naprawiło problemu tylko go zamaskowało. FatFS z &quot;modyfikacją&quot; z pierwszego posta cały czas odczytywał dane po jednym bloku. Działał przez to &quot;poprawnie&quot; tylko zdecydowanie wolniej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez Gość — 11 mar 2014, o 13:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Lemosek]]></name></author>
<updated>2013-05-21T18:13:03+01:00</updated>
<published>2013-05-21T18:13:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37424#p37424</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37424#p37424"/>
<title type="html"><![CDATA[Re: FatFS + karta SDHC - odczyt ponad 512B]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37424#p37424"><![CDATA[
<div class="quotetitle">xbary napisał(a):</div><div class="quotecontent"><br />a poszukaj może #define_MAX_SS 512 w pliku ffconf.h .<br /><br />...tam coś napisane jest odnośnie porcjowania danych, nie mam jak sprawdzić teraz ani później ale to może być to<br /></div><br /><br />To chyba nie to <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#define   _MAX_SS      512      /* 512, 1024, 2048 or 4096 */<br />/* Maximum sector size to be handled.<br />/  Always set 512 for memory card and hard disk but a larger value may be<br />/  required for on-board flash memory, floppy disk and optical disk.<br />/  When _MAX_SS is larger than 512, it configures FatFs to variable sector size<br />/  and GET_SECTOR_SIZE command must be implememted to the disk_ioctl function. */<br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=426">Lemosek</a> — 21 maja 2013, o 18:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xbary]]></name></author>
<updated>2013-05-21T17:56:48+01:00</updated>
<published>2013-05-21T17:56:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37423#p37423</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37423#p37423"/>
<title type="html"><![CDATA[Re: FatFS + karta SDHC - odczyt ponad 512B]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37423#p37423"><![CDATA[
<div class="quotetitle">wwojtek napisał(a):</div><div class="quotecontent"><br />wczytywanie takich małych porcji z karty zbyt szybkie nie jest, więc zacząłem to trochę poprawiać. Powstał więc &quot;bufor&quot; do którego wczytuję dane z karty. A potem hurtowo leci do LCD. Wszystko działa dobrze dopóki bufor jest &lt;= 512B. Problem pojawia się przy próbie odczytania na raz więcej niż 512B danych z karty - pojawiają się przekłamania. Tzn FatFS nie zwraca żadnych błędów, liczba odczytach bajtów (przez f_read) się zgadza, ale dane już nie do końca.  <br />Trochę powalczyłem i problem występuje, gdy spełniony jest warunek &quot;if(cc)&quot; w 2488 linijce pliku ff.c:<br /></div><br /><br />a poszukaj może #define_MAX_SS512 w pliku ffconf.h .<br /><br />...tam coś napisane jest odnośnie porcjowania danych, nie mam jak sprawdzić teraz ani później ale to może być to <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=447">xbary</a> — 21 maja 2013, o 17:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Lemosek]]></name></author>
<updated>2013-05-21T16:34:33+01:00</updated>
<published>2013-05-21T16:34:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37419#p37419</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37419#p37419"/>
<title type="html"><![CDATA[Re: FatFS + karta SDHC - odczyt ponad 512B]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37419#p37419"><![CDATA[
Witam,<br />widzę, że to nie jest tylko mój problem <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />. Ostatnio też bawię się arm i tft. Ja odczytuję pliki bmp 24bit z karty gdzie odczytuję trzy bajty a następnie robię konwersję 565 i do wyświetlacza. Ja też w celu zwiększenia prędkości stworzyłem bufor, najpierw mały i było trochę szybciej więc zrobiłem duży i dupa. Objaw jest jak u ciebie. <br />Na razie nie mam czasu do tego usiąść i przeanalizować o co chodzi ??. Jak to testowałem to pomyślałem, że jakiegoś babola zrobiłem i dałem sobie spokój (z braku czasu) ale teraz widzę, że to coś innego. <br />Jak na coś wpadniesz to daj znać.<br /><br />Pozdrawiam<br />R.L.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=426">Lemosek</a> — 21 maja 2013, o 16:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-05-21T16:13:20+01:00</updated>
<published>2013-05-21T16:13:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37418#p37418</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37418#p37418"/>
<title type="html"><![CDATA[FatFS + karta SDHC - odczyt ponad 512B]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3159&amp;p=37418#p37418"><![CDATA[
Witam!<br /><br />Walczę! Ale coś wygrać nie mogę ;) Potrzebna jest pomoc kogoś kto ma bibliotekę FatFS w małym palcu.<br /><br />Wstęp: biblioteka w wersji 0.9b ściągnięta ze strony projektu. Interfejs dla karty &quot;doklejony&quot; pomyślnie. Pierwsze próby zapisu i odczytu zakończone powodzeniem. Napisałem program testowy wczytujący obrazek na LCD. W wersji testowej była to pętla odczytująca 2B z karty (2B to dane o jednym pikselu, format RGB 565) i wrzucająca to na LCD. Wszystko działa super. <br /><br />Rozwinięcie: wczytywanie takich małych porcji z karty zbyt szybkie nie jest, więc zacząłem to trochę poprawiać. Powstał więc &quot;bufor&quot; do którego wczytuję dane z karty. A potem hurtowo leci do LCD. Wszystko działa dobrze dopóki bufor jest &lt;= 512B. Problem pojawia się przy próbie odczytania na raz więcej niż 512B danych z karty - pojawiają się przekłamania. Tzn FatFS nie zwraca żadnych błędów, liczba odczytach bajtów (przez f_read) się zgadza, ale dane już nie do końca.  <br />Trochę powalczyłem i problem występuje, gdy spełniony jest warunek &quot;if(cc)&quot; w 2488 linijce pliku ff.c:<br /><br />[syntax=c]cc = btr / SS(fp-&gt;fs);      /* When remaining bytes &gt;= sector size, */<br />if (cc) {      /* Read maximum contiguous sectors directly */<br />     if (csect + cc &gt; fp-&gt;fs-&gt;csize)      /* Clip at cluster boundary */<br />          cc = fp-&gt;fs-&gt;csize - csect;<br />     if (disk_read(/*fp-&gt;fs-&gt;drv,*/rbuff, sect, (BYTE) cc) != RES_OK)<br />          ABORT(fp-&gt;fs, FR_DISK_ERR);<br />#if !_FS_READONLY &amp;&amp; _FS_MINIMIZE &lt;= 2     /* Replace one of the read sectors with cached data if it contains a dirty sector */<br />#if _FS_TINY<br />     if (fp-&gt;fs-&gt;wflag &amp;&amp; fp-&gt;fs-&gt;winsect - sect &lt; cc)<br />          mem_cpy(rbuff + ((fp-&gt;fs-&gt;winsect - sect) * SS(fp-&gt;fs)), fp-&gt;fs-&gt;win, SS(fp-&gt;fs));<br />#else<br />     if ((fp-&gt;flag &amp; FA__DIRTY) &amp;&amp; fp-&gt;dsect - sect &lt; cc)<br />          mem_cpy(rbuff + ((fp-&gt;dsect - sect) * SS(fp-&gt;fs)), fp-&gt;buf, SS(fp-&gt;fs));<br />#endif<br />#endif<br />     rcnt = SS(fp-&gt;fs) * cc;          /* Number of bytes transferred */<br />     continue;<br />}[/syntax]<br /><br />Za każdym razem gdy program wejdzie w obsługą tych instrukcji (cc!=0), występują przekłamania w odczytanych danych. Na wyświetlaczu objawia się to np. &quot;tęczą&quot; w jednym wierszu pikseli. Próbowałem dojść do tego o co tu chodzi, ale obawiam się, że bez zrozumienia systemu FAT i przeanalizowania połowy biblioteki nic nie wymyślę ;/.<br />Próbowałem skorzystać z starszych wersji FatFS ale bez zmian. Co ciekawe, gdy &quot;unieszkodliwiam&quot; ten warunek zamieniając bezczelnie &quot;if(cc)&quot; na &quot;if(0)&quot; to ... uwaga !! tadadam!! wszystko działa dobrze, nawet i z buforem 10kB ;/ Tylko boję się, że toto może być jednak do czegoś potrzebne i takie gmeranie na chybił trafił się na mnie zemści. <br /><br />Zakończenie: pomocy :) Przydadzą się wszelkie informacje: czy ktoś spotkał podobny problem, może udało się rozwiązać? Czy to może być wina karty/systemu plików na niej? Może formatowanie jej pomoże? Ew. może ktoś zna FatFS i wie za co &quot;po ludzku&quot; odpowiada ten warunek?<br /><br />Pozdrawiam!<p>Statystyki: Napisane przez Gość — 21 maja 2013, o 16:13</p><hr />
]]></content>
</entry>
</feed>