И снова о FDTI Vinculum

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

Reply to
Alexander Torres
Loading thread data ...

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; }

Reply to
Alexey V Bugrov

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

Reply to
Alexander Torres

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

Reply to
Alexander Torres

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

Reply to
Alexey V Bugrov

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

Reply to
Alexander Torres

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

Reply to
Alexey V Bugrov

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

Reply to
Alexander Torres

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

Reply to
Alexey V Bugrov

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

Reply to
Alexander Torres

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

Reply to
Alexander Torres

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

Reply to
Alexey V Bugrov

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

Reply to
Alexander Torres

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

Reply to
Alexey V Bugrov

Hello Alexander Torres!

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

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

Reply to
Alexander Konosevich

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

Reply to
Alexander Torres

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.