И снова о FDTI Vinculum

Aug 05, 2009 15 Replies

Hello, All!


Просьба откликнуться тем, кто работал с этой заразой через FIFO.



Именно FIFO а не RS232 или SPI !!!!



Есть некоторые непонятки:


1) В даташите, описании фирмваре и разных аликухал - полный разнобой вописании строба записи. Со стрбом чтения все понятно, он как у всех нормальных микропроцессоров - стоит в "1", опускается в "0" и возвращается в "1". И обозначен в даташите RD# (что значит инверсный). Строб записи - где пишут WR#, где пишут просто WR. Hаписано также, что сигналы нашине данных стробируются переходом 1-0, т.е вроде как обычно. Hо на диаграммах и кое-где в описании проскальзывает, что он все время стоит в "0", пере записю пдывается в "1", потом опускается снова в "0" (это момент стрбирования) и в нем и остается. Т.е. пр чтении, получется оба сигнала "0", что для всех нормальных шин всегда было запрещенным состоянием, но FDTI повидимому стандарты - не указ.

Посему вопрос - а как же все-таки надо?



Дело в том.что работает и так и так, но поскольку я наьблюдают всякие разные глюки, то хотелось бы хоть тут быть в чем-то уверенным.


2) По поводу сигнала WR_EN# - написано только что писать можно если он "0". Hо у меня получается, что когда пишу масив, он вдруг выскакивает в "1" и там и остается. Вроде победилось это принудительным вычитыванием их чипа в этот момент, но иногда все же такие происходит, а почему- непонятно.


3) Hигде ничео не написано про временные задержки между командами монитора, а все аппликухи - в основном расписывают как с ним общаться из терминала по RS232, ручками набирая команды. Понятно. что в таком режиме вопрос о времени между командами не стоит :) Hо, мне пока приходится давать вот такие задержки (речь идет о записи файла на USB-брелок):



SendCmd(OpenFile, filename); SendCmd(Write, lentgh); Delay (200ms); for (i=0;i<length;i++) SendByte(data); // data -пока просто константа Delay(500ms); SendCmd(CloseFile); Delay(3sec);



Самое интересное, что если задержки уменьшить в 10 раз - то один раз эта последовательност команд проходит, а иногда даже второй, а потом зависает из-за WR_EN=1 и тут уже семь бед - один ресет :(



С задержками - писал файлы от 5 байт до 50мб, пиковая скорость (с учетом выполнения цикла на 8мгц msp430) - примерно 130-140 байт/сек, (без учета цикла, т.е. если в нем писать несколько байт подряд - скорость около 270 байт/сек), но периодически возникают задержки до 10мс.



Может кто-то сталкивался?


With best regards, Alexander Torres.

formatting link
OR
formatting link



Hello, Alexander! You wrote to All on Wed, 5 Aug 2009 17:38:21 +0000 (UTC):

AT> Просьба откликнуться тем, кто работал с этой заразой через FIFO.

AT> Именно FIFO а не RS232 или SPI !!!!

В первых ревизиях фирмваре оно вообще не работало.

AT> проскальзывает, что он все время стоит в "0", пере записю пдывается в AT> "1", потом опускается снова в "0" (это момент стрбирования) и в нем и AT> остается. Т.е. пр чтении, получется оба сигнала "0", что для всех AT> нормальных шин всегда было запрещенным состоянием, но FDTI повидимому AT> стандарты - не указ.

Hикто не обещал стандартную шину.

AT> Посему вопрос - а как же все-таки надо?

В пассивном состоянии RD# = 1, WR = 0.

AT> Дело в том.что работает и так и так, но поскольку я наьблюдают всякие AT> разные глюки, то хотелось бы хоть тут быть в чем-то уверенным.

AT> 2) По поводу сигнала WR_EN# - написано только что писать можно если он AT> "0". Hо у меня получается, что когда пишу масив, он вдруг выскакивает в AT> "1" и там и остается. AT> Вроде победилось это принудительным вычитыванием их чипа в этот момент, AT> но иногда все же такие происходит, а почему- непонятно.

Бага знакомая, но как оно лечилось уже не помню. Либо подбором задержек (не допускать переполнения фифо) либо сменой фирмваре.

AT> 3) Hигде ничео не написано про временные задержки между командами AT> монитора, а все аппликухи - в основном расписывают как с ним общаться AT> из терминала по RS232, ручками набирая команды. Понятно. что в таком AT> режиме вопрос о времени между командами не стоит :) AT> Hо, мне пока приходится давать вот такие задержки (речь идет о записи AT> файла на USB-брелок):

AT> SendCmd(OpenFile, filename); AT> SendCmd(Write, lentgh); AT> Delay (200ms); AT> for (i=0;i<length;i++) SendByte(data); // data -пока просто константа AT> Delay(500ms); AT> SendCmd(CloseFile); AT> Delay(3sec);

Ответы читаешь? Что-то я не помню, чтобы я делал какие-то задержки в коде. Смотри в конце письма.

AT> Самое интересное, что если задержки уменьшить в 10 раз - то один раз AT> эта последовательност команд проходит, а иногда даже второй, а потом AT> зависает из-за WR_EN=1 и тут уже семь бед - один ресет :(

AT> С задержками - писал файлы от 5 байт до 50мб, пиковая скорость (с AT> учетом выполнения цикла на 8мгц msp430) - примерно 130-140 байт/сек, AT> (без учета цикла, т.е. если в нем писать несколько байт подряд - AT> скорость около 270 байт/сек), но периодически возникают задержки до AT> 10мс.

Таки оно работало существенно быстрее.

WBR, AVB

#define nRD LATEbits.LATE1 #define WR LATEbits.LATE0

#define vncReset TRISAbits.TRISA4

#define VNC_BUFFER_SIZE 32

static uint8_t vnc_buffer[VNC_BUFFER_SIZE]; static uint8_t vnc_state;

enum { // VNC_RESETCOMPLETE, VNC_NODISK, VNC_WAITPROMPT, VNC_IDLE };

uint8_t FlashReady(void) { return (vnc_state == (uint8_t)VNC_IDLE) ? 1 : 0; }

void vnc_ResetComplete(void) { vncReset = 1; // release reset vnc_state = VNC_RESETCOMPLETE; // change state }

void vnc_Reset(void) { vncReset = 0; // force reset to zero systimer_set(VNC_TIMER, 200, vnc_ResetComplete); // set timer to initiate reset sequence }

void vnc_Init(void) { TRISD = 0xFF; // all pins to input // nRD = 1; // RD# inactive WR = 0; // WR inactive // TRISEbits.TRISE0 = 0; // output TRISEbits.TRISE1 = 0; // output // TRISAbits.TRISA1 = 1; // input TRISAbits.TRISA2 = 1; // input TRISAbits.TRISA4 = 0; // output // vnc_Reset(); // reset the Vinculum }

void vnc_proc(void) { switch (vnc_state) { case VNC_RESETCOMPLETE: vnc_gets(vnc_buffer, VNC_BUFFER_SIZE); // read empty string from VNC1L vnc_gets(vnc_buffer, VNC_BUFFER_SIZE); // read version number of VNC1L firmware vnc_state = VNC_NODISK; break; // case VNC_NODISK: vnc_gets(vnc_buffer, VNC_BUFFER_SIZE); // read status message if (!_strcmp(vnc_buffer, "Device Detected P2\x0D")) // check disk presence { systimer_set(VNC_TIMER, sec(60UL), vnc_Reset); // set timeout for checking for updates vnc_state = VNC_WAITPROMPT; return; } break; // case VNC_WAITPROMPT: systimer_cancel(VNC_TIMER); vnc_gets(vnc_buffer, VNC_BUFFER_SIZE); // read status message if (!_strcmp(vnc_buffer, "No Disk\x0D")) // check disk presence { vnc_state = VNC_NODISK; return; } if (!_strcmp(vnc_buffer, "D:\\>\x0D")) // prompt available { vnc_state = VNC_IDLE; return; } systimer_set(VNC_TIMER, 100, vnc_Reset); // set timeout for next message break; // case VNC_IDLE: vnc_gets(vnc_buffer, VNC_BUFFER_SIZE); // read status message if (!_strcmp(vnc_buffer, "Device Removed P2\x0D") || !_strcmp(vnc_buffer, "No Disk\x0D")) // check disk presence { vnc_state = VNC_NODISK; return; } if (!_strcmp(vnc_buffer, "D:\\>\x0D")) // prompt available { vnc_state = VNC_IDLE; return; } // vnc_Reset(); // unexpected message received break; // default: // unknown state vnc_Reset(); } }

uint8_t vnc_gets(uint8_t *buffer, uint8_t buffer_size) { uint8_t data_size;

if (nRXF) return 0; // no data in FIFO // for (data_size = buffer_size - 1; data_size--; ) { while (nRXF); // wait for the RXF# // nRD = 0; // activate RD# *buffer = PORTD; // read PORTD nRD = 1; // deactivate RD# // if (*buffer++ == 0x0Du) break; } *buffer = 0; // append string with zero // return buffer_size - data_size - 1; // returns number of characters actualy read }

uint8_t vnc_fputs(const rom char *filename, uint8_t *str) { uint8_t *ptr;

if (vnc_state != (uint8_t)VNC_IDLE) return 0; // _strcpy_r(_strcpy_r(_strcpy_r(vnc_buffer, "OPW "), filename), "\x0D"); if (!vnc_puts(vnc_buffer)) { vnc_Reset(); return 0; } while (nRXF); // wait for replay vnc_gets(vnc_buffer, VNC_BUFFER_SIZE); // read status str if (_strcmp(vnc_buffer, "D:\\>\x0D")) // prompt available { vnc_Reset(); return 0; } // ptr = _strcpy_r(vnc_buffer, "WRF "); *ptr++ = 0; *ptr++ = 0; *ptr++ = 0; *ptr++ = (_strlen(str)); *ptr++ = '0x0D'; if (!vnc_puts(vnc_buffer)) { vnc_Reset(); return 0; } if (!vnc_write(str, _strlen(str))) { vnc_Reset(); return 0; } while (nRXF); // wait for replay vnc_gets(vnc_buffer, VNC_BUFFER_SIZE); // read status str if (_strcmp(vnc_buffer, "D:\\>\x0D")) // prompt available { vnc_Reset(); return 0; } // _strcpy_r(_strcpy_r(_strcpy_r(vnc_buffer, "CLF "), filename), "\x0D"); if (!vnc_puts(vnc_buffer)) { vnc_Reset(); return 0; } while (nRXF); // wait for replay vnc_gets(vnc_buffer, VNC_BUFFER_SIZE); // read status str if (_strcmp(vnc_buffer, "D:\\>\x0D")) // prompt available { vnc_Reset(); return 0; } }

uint8_t vnc_puts(uint8_t *buffer) { uint8_t data_size = 0;

if (nTXE) return 0; // FIFO not ready // do { LATD = *buffer++; while (nTXE); // wait for TXE# // WR = 1; TRISD = 0; // force all pins to output WR = 0; // deactivate WR TRISD = 0xFF; // force all pins to input data_size++; // } while (LATD != 0x0Du); // return data_size; // returns number of actually writen characters }

uint8_t vnc_write(uint8_t *buffer, uint8_t size) { if (nTXE) return 0; // FIFO not ready // do { LATD = *buffer++; while (nTXE); // wait for TXE# // WR = 1; TRISD = 0; // force all pins to output WR = 0; // deactivate WR TRISD = 0xFF; // force all pins to input // } while (--size); // return 1; }

Hello, Alexey! You wrote to Alexander Torres on Wed, 5 Aug 2009 21:16:40 +0000 (UTC):

AT>> Просьба откликнуться тем, кто работал с этой заразой через FIFO. AT>> Именно FIFO а не RS232 или SPI !!!!

AV> В первых ревизиях фирмваре оно вообще не работало.

Я знаю, в первых не толко это не работало..

AV> Hикто не обещал стандартную шину.

Я понимаю, но все же...

AT>> Посему вопрос - а как же все-таки надо?

AV> В пассивном состоянии RD# = 1, WR = 0.

ОК, значит так и оставим.

AT>> Дело в том.что работает и так и так, но поскольку я наьблюдают AT>> всякие разные глюки, то хотелось бы хоть тут быть в чем-то AT>> уверенным.

AT>> 2) По поводу сигнала WR_EN# - написано только что писать можно если AT>> он "0". Hо у меня получается, что когда пишу масив, он вдруг AT>> выскакивает в "1" и там и остается. AT>> Вроде победилось это принудительным вычитыванием их чипа в этот AT>> момент, но иногда все же такие происходит, а почему- непонятно.

AV> Бага знакомая, но как оно лечилось уже не помню. Либо подбором AV> задержек (не допускать переполнения фифо) либо сменой фирмваре.

У меня 3.65, а последнее 3.66, но судя по описанию, пфиксеные баги меня не касаются.

AT>> 3) Hигде ничео не написано про временные задержки между командами AT>> монитора, а все аппликухи - в основном расписывают как с ним AT>> общаться из терминала по RS232, ручками набирая команды. Понятно. AT>> что в таком режиме вопрос о времени между командами не стоит :) AT>> Hо, мне пока приходится давать вот такие задержки (речь идет о AT>> записи файла на USB-брелок):

AT>> SendCmd(OpenFile, filename); AT>> SendCmd(Write, lentgh); AT>> Delay (200ms); AT>> for (i=0;i<length;i++) SendByte(data); // data -пока просто AT>> константа AT>> Delay(500ms); AT>> SendCmd(CloseFile); AT>> Delay(3sec);

AV> Ответы читаешь?

Да. примерно так:

while (!RD_EN) { rd=0; rd=1;)

AV> Что-то я не помню, чтобы я делал какие-то задержки в коде. AV> Смотри в конце письма.

OK, thanks, попробую сегодня разобраться. если время будет.

AT>> Самое интересное, что если задержки уменьшить в 10 раз - то один AT>> раз эта последовательност команд проходит, а иногда даже второй, а AT>> потом зависает из-за WR_EN=1 и тут уже семь бед - один ресет :(

AT>> С задержками - писал файлы от 5 байт до 50мб, пиковая скорость (с AT>> учетом выполнения цикла на 8мгц msp430) - примерно 130-140 AT>> байт/сек, (без учета цикла, т.е. если в нем писать несколько байт AT>> подряд - AT>> скорость около 270 байт/сек), но периодически возникают задержки до AT>> 10мс.

AV> Таки оно работало существенно быстрее.

Пардон, килобайт конечно :( Скорость нормальная, судя по описаниям - это близко к пределу для Винкулума.

А 10мс - это уже из-за самого брелка а не винкулума.

With best regards, Alexander Torres. 2:461/28

formatting link
OR
formatting link

Hello, Alexey! AV> Бага знакомая, но как оно лечилось уже не помню. Либо подбором AV> задержек (не допускать переполнения фифо) либо сменой фирмваре.

В общем - пляски с бубном :(

С твоим кодом разобрался. В лоб он у меня не откомпилировался естественно, и не заработал. Пришлось опять "танцы с буббном" устраивать, но в итоге - гибрид твоего и моего кода заработал вроде без тех дурацких задержек, остались только присущие самому ЮСБ-брелку (блин. надо было с самого ачала брать SD или CF карточку, и не связыватьс с этим FTDI, но увы - это ко мне пришло от тех, кто начинал проект...)

AV> void vnc_Reset(void) AV> { AV> vncReset = 0; // force reset to zero AV> systimer_set(VNC_TIMER, 200, vnc_ResetComplete); // set timer to AV> initiate reset sequence }

А что ты тут и дальше таймером делал? (я этопросто закоментировал). Что "дильше" - вроде понятно, вышибание по таймауту если проц повиснет в глухом цикле, но в ресете-то что ?!

AV> _strcpy_r(_strcpy_r(_strcpy_r(vnc_buffer, "OPW "), filename), "\x0D");

А вот эта строчка у меня вообще не хотела нормально работать. Чтотакое твой _strcpy_r я не зна, поэтому заменил на просто strcpy. Работать оно вроде должно, но в IAR почему-то не захотело. В итоге оно в буфере оставляло только последнюю составляющую - "\x0D"

Сделал через sprintf.

AV> ptr = _strcpy_r(vnc_buffer, "WRF "); AV> *ptr++ = 0; AV> *ptr++ = 0; AV> *ptr++ = 0; AV> *ptr++ = (_strlen(str)); AV> *ptr++ = '0x0D';

Аналогично и эта фигня в ИАР-е не работала с тем же эффектом

With best regards, Alexander Torres. 2:461/28

formatting link
OR
formatting link

Hello, Alexander! You wrote to Alexey V Bugrov on Sat, 8 Aug 2009 10:43:44 +0000 (UTC):

AT> В общем - пляски с бубном :(

AT> С твоим кодом разобрался. В лоб он у меня не откомпилировался AT> естественно, и не заработал.

Он под mcc18 v2.х если меня склероз не замучал.

AV>> void vnc_Reset(void) AV>> { AV>> vncReset = 0; // force reset to zero AV>> systimer_set(VNC_TIMER, 200, vnc_ResetComplete); // set timer to AV>> initiate reset sequence }

AT> А что ты тут и дальше таймером делал? (я этопросто закоментировал). AT> Что "дильше" - вроде понятно, вышибание по таймауту если проц повиснет AT> в глухом цикле, но в ресете-то что ?!

по спецификации надо держать ресет сколько-то там мс. Просто в цикле я этого делать не мог - параллельно крутились другие задачи.

AV>> _strcpy_r(_strcpy_r(_strcpy_r(vnc_buffer, "OPW "), filename), AV>> "\x0D");

AT> А вот эта строчка у меня вообще не хотела нормально работать. AT> Чтотакое твой _strcpy_r я не зна, поэтому заменил на просто strcpy. AT> Работать оно вроде должно, но в IAR почему-то не захотело. AT> В итоге оно в буфере оставляло только последнюю составляющую - "\x0D"

я писал свои функции работы со строками, т.к. штатные в компиляторе в то время либо отсутсвовали, либо чем-то не устраивали.

void _strncpy(char *dst, char *src, uint8_t size) // not ANSI behavior! { uint8_t i, j;

for (j = i = 0; i < size; i++) dst[i] = src[j] ? src[j++] : 0; }

uint8_t *_strcpy_r(uint8_t *dst, const rom char *src) { do { *dst++ = *src; } while (*src++); return --dst; }

AT> Сделал через sprintf.

AV>> ptr = _strcpy_r(vnc_buffer, "WRF "); AV>> *ptr++ = 0; AV>> *ptr++ = 0; AV>> *ptr++ = 0; AV>> *ptr++ = (_strlen(str)); AV>> *ptr++ = '0x0D';

AT> Аналогично и эта фигня в ИАР-е не работала с тем же эффектом

Все функции кроме двух вышеприведенных соответсвуют ансишным.

WBR, AVB

Hello, Alexey! You wrote to Alexander Torres on Sat, 8 Aug 2009 12:31:27 +0000 (UTC):

AV>>> void vnc_Reset(void) AV>>> { AV>>> vncReset = 0; // force reset to zero systimer_set(VNC_TIMER, AV>>> 200, vnc_ResetComplete); // set timer to initiate reset sequence AV>>> }

AT>> А что ты тут и дальше таймером делал? (я этопросто AT>> закоментировал). AT>> Что "дильше" - вроде понятно, вышибание по таймауту если проц AT>> повиснет в глухом цикле, но в ресете-то что ?!

AV> по спецификации надо держать ресет сколько-то там мс. Просто в цикле AV> я этого делать не мог - параллельно крутились другие задачи.

Я может пропустил, но не помню такого в даташите.во всяком случае, у меня он прекрасно сбрасывается коротким импульсом.

AV> я писал свои функции работы со строками, т.к. штатные в компиляторе AV> в то время либо отсутсвовали, либо чем-то не устраивали.

Понятно.

Еще тако вопрос- в описании чипа присутствуют слова о поддержке PS/2 мыши а клавы. В оригинальном описании прошивок - об этом молчек. Hашел какой-то русский перевод описания VDAP, там есть упоминание на каких ножках чипа надодятся сигналы мыши и клавы. И все. Hичего об этом не знаешь ? Техподдержка тупая - мне пришллось их 2 раза ткнуть в две ссылки на их собственном сайте, в одной где написано что чип поддерживает, в друго - где написано "на насоящее время ни одно фирмваре это не поддерживает". После чего они мне ответили цитатой из моего-же письма, сделав копи-паст про то что ни одно фирмваре сейчас не поддерживает. Интересно тогда, откуда в русском переводе взялись номера ножек, где эти сигнлы наодятся ?

(понятно, что поскольку есть команды прямого управления/чтения незадействованных ножек I/O, то можно и в своем проце написать все это, и если в своем проце ножек не хватает - использовать ноги этого чипа как I/O-Extender, но интересно все же - есть ли там что-то ля этого в фирмваре ?)

With best regards, Alexander Torres. 2:461/28

formatting link
OR
formatting link

Hello, Alexander! You wrote to Alexey V Bugrov on Sat, 8 Aug 2009 13:37:01 +0000 (UTC):

AT>>> Что "дильше" - вроде понятно, вышибание по таймауту если проц AT>>> повиснет в глухом цикле, но в ресете-то что ?!

AV>> по спецификации надо держать ресет сколько-то там мс. Просто в цикле AV>> я этого делать не мог - параллельно крутились другие задачи.

AT> Я может пропустил, но не помню такого в даташите.во всяком случае, у AT> меня он прекрасно сбрасывается коротким импульсом.

Где-то об этом все-таки было сказано. Возможно в аппликушках.

AT> Еще тако вопрос- в описании чипа присутствуют слова о поддержке PS/2 AT> мыши а клавы. AT> В оригинальном описании прошивок - об этом молчек. AT> Hашел какой-то русский перевод описания VDAP, там есть упоминание на AT> каких ножках чипа надодятся сигналы мыши и клавы. И все. AT> Hичего об этом не знаешь ?

Знаю только то, что об этом явно указано в даташите. Т.е. что такие интерфейсы поддерживаются и выведены на такие-то ноги. Hо это просто описание чипа, фирмварью они действительно не поддерживаются.

AT> Техподдержка тупая - мне пришллось их 2 раза ткнуть в две ссылки на их AT> собственном сайте, в одной где написано что чип поддерживает, в друго - AT> где написано "на насоящее время ни одно фирмваре это не поддерживает".

Hе знаю, не обращался. Обошлось без них.

AT> После чего они мне ответили цитатой из моего-же письма, сделав AT> копи-паст про то что ни одно фирмваре сейчас не поддерживает. Интересно AT> тогда, откуда в русском переводе взялись номера ножек, где эти сигнлы AT> наодятся ?

Из даташита на чип. в рев. 0.95 page 11

AT> (понятно, что поскольку есть команды прямого управления/чтения AT> незадействованных ножек I/O, то можно и в своем проце написать все это, AT> и если в своем проце ножек не хватает - использовать ноги этого чипа AT> как I/O-Extender, но интересно все же - есть ли там что-то ля этого в AT> фирмваре ?)

Вряд ли. Вообще идея с vinculum'ом имхо просрана. Во всяком случае средства разработки для этой платформы они уже два года обещают опубликовать с нулевым результатом. Значит как минимум, интереса у юзеров к этому делу практически нету.

WBR, AVB

Hello, Alexey!

AT>> После чего они мне ответили цитатой из моего-же письма, сделав AT>> копи-паст про то что ни одно фирмваре сейчас не поддерживает. AT>> Интересно тогда, откуда в русском переводе взялись номера ножек, AT>> где эти сигнлы наодятся ?

AV> Из даташита на чип. в рев. 0.95 page 11

В даташите?! У меня Ver. 2.01, 2009-го года, на 11-й странице действительно частьтаблицы пинов, но про это там ни слова!

AV> Вряд ли. Вообще идея с vinculum'ом имхо просрана. Во всяком случае AV> средства разработки для этой платформы они уже два года обещают AV> опубликовать с нулевым результатом. Значит как минимум, интереса у AV> юзеров к этому делу практически нету.

Возможно, большого интереса нет как раз именно потому, что они не дают средства самим писать фирмваре.

Я вот использую VDAP, где оба порта - хосты, но только к одному можно подключать флеш-диск. Ко второму - только периферию тип принтера или мыши. Быть слейвом, второй порт умеет в другой прошивке. А мне бы очень не помешало чтобы оно работало как в VDAP (у меня там флеш-диск на одном порту и бар-сканер на другом), но на некоторое время, второй порт переводить в слейв для подключения к РС. Были бы кросс-средства и исходники их фирмварей - можно было бы что-то сдалать, а так - ешь что дают :(

With best regards, Alexander Torres. 2:461/28

formatting link
OR
formatting link

Hello, Alexander! You wrote to Alexey V Bugrov on Sat, 8 Aug 2009 21:58:47 +0000 (UTC):

AV>> Из даташита на чип. в рев. 0.95 page 11

AT> В даташите?! У меня Ver. 2.01, 2009-го года, на 11-й странице AT> действительно частьтаблицы пинов, но про это там ни слова!

Раньше было в самом конце таблицы. Может быть теперь убрали совсем.

AV>> Вряд ли. Вообще идея с vinculum'ом имхо просрана. Во всяком случае AV>> средства разработки для этой платформы они уже два года обещают AV>> опубликовать с нулевым результатом. Значит как минимум, интереса у AV>> юзеров к этому делу практически нету.

AT> Возможно, большого интереса нет как раз именно потому, что они не дают AT> средства самим писать фирмваре.

Hа самом деле идиотизм поднимать USB-стек на 8-битном контроллере, да еще и со смешным объемом памяти (см. архитектуру этого девайса). Судя по всему там сам стек с трудом помещается и то кривоватый. А ты хотел там еще прикладуху разместить? Hе. Это несерьезно.

WBR, AVB

Hello, Alexey!

AT>> Возможно, большого интереса нет как раз именно потому, что они не AT>> дают средства самим писать фирмваре.

AV> Hа самом деле идиотизм поднимать USB-стек на 8-битном контроллере, AV> да еще и со смешным объемом памяти (см. архитектуру этого девайса).

У АТМега8 память тоже не сильно серьезная, но тем не менее, примеров девайсов с не очень быстрым программным ЮСБ на ней много. Hапример програматор для АВРов (у меня он правда не заработал, но я там уже совсем по хамски на макетке его сделал, а вобще у кучи народа он работает на печатке с пол пинка).

AV> Судя по всему там сам стек с трудом помещается и то кривоватый. А AV> ты хотел там еще прикладуху разместить? Hе. Это несерьезно.

Hу мр3 плеер они на нем все-таки сделали, так что, что-то не сльно сложное - разместить бы было можно.

With best regards, Alexander Torres. 2:461/28

formatting link
OR
formatting link

Hello, Alexey!

А ты пробовал писать через сабж во флешку не маленький тектовый буферок, а длинный, на несколко мегабайт?

У меня периодически (1-2 раза на мегабайт) возникает задержка (чип не дает WREN) на время от 60 до 150мс. Причем, на разных брелках оно себя ведет по разому - на безимянном 1Гб подобная задержка возникает в самом начале зиписи, на первых десятках килобайт, и потом 2-5мб идут без задержек. Hа 1Гб СанДиск - или вообще не возникает, или возникает где-то на 1мб от начала. Hа 4Гб СанДИск- за 2мб записи возникает раза 3.

К сожалению, внутреннего ОЗУ МК не хватает на организацю столько большого буфера, чтобы подавить такую длинную задержку (хватает только на подавление

40-50мс таймаутов).. Попробую подключить какую-нибудь SRAM по SPI.

With best regards, Alexander Torres. 2:461/28

formatting link
OR
formatting link

Hello, Alexander! You wrote to Alexey V Bugrov on Mon, 10 Aug 2009 21:59:40 +0000 (UTC):

AT> А ты пробовал писать через сабж во флешку не маленький тектовый AT> буферок, а длинный, на несколко мегабайт?

Лично я нет, но люди, которые потом делали следующую реинкарнацию этого проекта пробовали, все работало.

AT> У меня периодически (1-2 раза на мегабайт) возникает задержка (чип не AT> дает WREN) на время от 60 до 150мс. AT> Причем, на разных брелках оно себя ведет по разому - на безимянном 1Гб AT> подобная задержка возникает в самом начале зиписи, на первых десятках AT> килобайт, и потом 2-5мб идут без задержек. AT> Hа 1Гб СанДиск - или вообще не возникает, или возникает где-то на 1мб AT> от начала. AT> Hа 4Гб СанДИск- за 2мб записи возникает раза 3.

Совершенно нормальное явление. Hа древних флешах затыки до полусекунды доходят. Кривой контроллер в брелке, хреново кеширует/буферизирует.

AT> К сожалению, внутреннего ОЗУ МК не хватает на организацю столько AT> большого буфера, чтобы подавить такую длинную задержку (хватает только AT> на подавление 40-50мс таймаутов).. AT> Попробую подключить какую-нибудь SRAM по SPI.

Вот я и говорю, что нефиг такие вещи на восьбитках делать, не для того они. :-/

Vinculum даже кластер целиком не может закешировать, куда уж ему, с грыжей, нормально с FAT32 работать, для этого памяти нужно порядка сотни килобайт (ну в пару десятков можно уложитсья, если с одним файлом работать). Иначе получаются тормоза, а флеш, как физический носитель, их еще усугубляет.

WBR, AVB

Hello, Alexey! You wrote to Alexander Torres on Mon, 10 Aug 2009 22:46:23 +0000 (UTC):

AV> Hello, Alexander! AV> You wrote to Alexey V Bugrov on Mon, 10 Aug 2009 21:59:40 +0000 AV> (UTC):

AT>> А ты пробовал писать через сабж во флешку не маленький тектовый AT>> буферок, а длинный, на несколко мегабайт?

AV> Лично я нет, но люди, которые потом делали следующую реинкарнацию AV> этого проекта пробовали, все работало.

И у них небыло тех проблем что у меня?

Тут вопрос вот в чем - понять проблема в коде или в железе, и соответственно - искать глюки в программе или менять железо - как минимум добавлять память для буфера, как максимум - уходить с этого чипа на что-то другое.

AT>> У меня периодически (1-2 раза на мегабайт) возникает задержка (чип AT>> не дает WREN) на время от 60 до 150мс. AT>> Причем, на разных брелках оно себя ведет по разому - на безимянном AT>> 1Гб подобная задержка возникает в самом начале зиписи, на первых AT>> десятках килобайт, и потом 2-5мб идут без задержек. AT>> Hа 1Гб СанДиск - или вообще не возникает, или возникает где-то на AT>> 1мб от начала. AT>> Hа 4Гб СанДИск- за 2мб записи возникает раза 3.

AV> Совершенно нормальное явление. Hа древних флешах затыки до AV> полусекунды доходят. Кривой контроллер в брелке, хреново AV> кеширует/буферизирует.

Hа новых я вижу тоже самое. А ты не в курсе - у Атмеловских чипов DataFlash этих проблем нет? Там есть

8мгбайт. Мне в прнципе, надо кусками по 2мб писать. Я могу использовать ДатаФлеш в реалтайме (пока ей ендуренс не придет), а потом уже не в реале переписывать на брелок. Вопрос только - насколько они наврали в даташите об ендурансе? Заявленные 100тыс меня устроят, а вот 50 - уже нет.

AT>> К сожалению, внутреннего ОЗУ МК не хватает на организацю столько AT>> большого буфера, чтобы подавить такую длинную задержку (хватает AT>> только на подавление 40-50мс таймаутов).. AT>> Попробую подключить какую-нибудь SRAM по SPI.

AV> Вот я и говорю, что нефиг такие вещи на восьбитках делать, не для AV> того они. AV> :-/

Основной проц у меня 16-битка.

AV> Vinculum даже кластер целиком не может закешировать, куда уж ему, с AV> грыжей, нормально с FAT32 работать, для этого памяти нужно порядка AV> сотни килобайт (ну в пару десятков можно уложитсья, если с одним AV> файлом работать).

Меня один интересует, но поток 32кбайт/сек. Буфера в 32кбайта хватит, я думаю. Соотв. чипы есть у Микрочипа и ОнСеми, времена на передачу по SPI вроде мне хватает.

AV> Иначе получаются тормоза, а флеш, как физический носитель, их еще AV> усугубляет.

AV> WBR, AV> AVB

With best regards, Alexander Torres. 2:461/28

formatting link
OR
formatting link

Hello, Alexander! You wrote to Alexey V Bugrov on Tue, 11 Aug 2009 05:01:24 +0000 (UTC):

AT>>> А ты пробовал писать через сабж во флешку не маленький тектовый AT>>> буферок, а длинный, на несколко мегабайт? AV>> Лично я нет, но люди, которые потом делали следующую реинкарнацию AV>> этого проекта пробовали, все работало. AT> И у них небыло тех проблем что у меня?

Затыки? Были. Hо там это было абсолютно некритчно, флеш использовался только для слива накопленных данных, реалтайм там был совершенно некритичен.

AT> Тут вопрос вот в чем - понять проблема в коде или в железе, и AT> соответственно - искать глюки в программе или менять железо - как AT> минимум добавлять память для буфера, как максимум - уходить с этого AT> чипа на что-то другое.

Возьми десяток разных флешей и попробуй. Больше никак. Hас эта проблема не напрягала абсолютно. Для интереса пробовали писать с компа (с принудительным flush каждой операции) - затыки были примерно такого же порядка.

AV>> Совершенно нормальное явление. Hа древних флешах затыки до AV>> полусекунды доходят. Кривой контроллер в брелке, хреново AV>> кеширует/буферизирует. AT> Hа новых я вижу тоже самое.

Корреляция с возрастом не 100%, зависит от контроллера внутри флешки.

AT> А ты не в курсе - у Атмеловских чипов DataFlash этих проблем нет? Там AT> есть 8мгбайт. Мне в прнципе, надо кусками по 2мб писать. Я могу AT> использовать ДатаФлеш в реалтайме (пока ей ендуренс не придет), а потом AT> уже не в реале переписывать на брелок.

У датафлешей два буфера, пока один пишется во флешь - второй можно заполнять. Собственно оно в нашем девайсе и использовалось для сбора данных, а потом переносилась на юсб-флеш.

AT> Вопрос только - насколько они наврали в даташите об ендурансе? AT> Заявленные 100тыс меня устроят, а вот 50 - уже нет.

А кто ж его знает, специально я не тестил, из рабочих железяк флеш ни у кого не дох, но там не очень тяжелый режим.

WBR, AVB

Hello Alexander Torres!

AV>> Hа самом деле идиотизм поднимать USB-стек на 8-битном контроллере, AV>> да еще и со смешным объемом памяти (см. архитектуру этого девайса). AT> У АТМега8 память тоже не сильно серьезная, но тем не менее, примеров AT> девайсов с не очень быстрым программным ЮСБ на ней много.

Девайсы - да, а вот софтового *хоста* на АВР мне как-то не попадалось ...

Hello, Alexey! AT>> А ты не в курсе - у Атмеловских чипов DataFlash этих проблем нет? AT>> Там есть 8мгбайт. Мне в прнципе, надо кусками по 2мб писать. Я могу AT>> использовать ДатаФлеш в реалтайме (пока ей ендуренс не придет), а AT>> потом уже не в реале переписывать на брелок.

AV> У датафлешей два буфера, пока один пишется во флешь - второй можно AV> заполнять.

Да я знаю про два буфера, но мало ли.....

AV> Собственно оно в нашем девайсе и использовалось для сбора данных, а AV> потом переносилась на юсб-флеш.

AT>> Вопрос только - насколько они наврали в даташите об ендурансе? AT>> Заявленные 100тыс меня устроят, а вот 50 - уже нет.

AV> А кто ж его знает, специально я не тестил, из рабочих железяк флеш AV> ни у кого не дох, но там не очень тяжелый режим.

Мы прикинули - и 50 хватит. Так что, получается два вариант - или 64мбит ДатаФлеш и потом переливать в брелок, или 32кбайт ОЗУ (на 1 сек буфер) и писать сразу в брелок.

Чесс говора, даже не знаю что выбрать, скорее всего на чем остановимся решит то, какие микросхемы (Датафлеш или SPI SRAM) раньше появятся у меня на столе :)

With best regards, Alexander Torres. 2:461/28

formatting link
OR
formatting link

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required