با سلام. چندی پیش برای یک پروژه نیاز به انتقال حجم زیادی از اطلاعات به کامپیوتر داشتم. اطلاعات از یک سنسور تصویری دریافت و در یک SDRAMآ ذخیره می شدند که بحث من نیست. برای انتقال ازلاعات تصمیم گرفتیم از پورت USB آاستفاده کنیم. در دسترس ترین آی سی با سرعت بالا آی سی FT2232H بود که طبق گفته ی شرکت FTDI میشه از اون در حالت Synch FIFO Mode استفاده کرد. در این حالت این آی سی یک FIFO به اندازه 65280 بایت و یک پالس 60 مگا هرتز در اختیار کاربر قرار میده که مستقیما به FPGAآمتصل می شوند و هرچی درون اون نوشته بشه میشه با توابعی که خود FTDI در اختیار گذاشته در Visual Studioآداده ها رو با سرعت خوبی دریافت کرد.
پس از سروکله زدن بسیار با این آی سی به یک مشکل اساسی برخوردیم: شمارنده ی داخلی این آی سی هر 510 بایت یک بار، به اندازه ی 2 واحد افزایش پیدا کرده و یک بایت داده از دست می رود. این مشکل توسط FTDI به صورت مستقیم تأیید نشده و فقط گفته شده که شمارنده دو واحد در بعضی موارد افزایش پیدا می کنه و در ورژن B آی سی این مشکل اصلاح شده. ولی ما از ورژن B استفاده کردیم و مشکل وجود داشت!
مشکل دیگری که با اون روبرو شدیم: در صورتی که ابتدا یا انتهای بسته ی داده، بایت 0xFF داشته باشیم، آی سی Byte Stuffingآانجام داده و یک بایت 0xFF به آن اضافه می کند.
در مورد مشکل اول سعی کردیم بسته های داده را در تعداد کمتر از 510 بایت (مثلا 500 یا 100 بایت) در FIFOآ آی سی FT2232H قرار دهیم و پس از خواندن این بسته، بسته ی بعدی را ارسال کنیم. ولی به مشکل دیگری برخوردیم: آی سی بایت 0x3B را در انتهای بسته های فرد و بایت 0x0F یا 0x0F را در انتهای بسته های زوج جایگزین آخرین بایت می کند. این بود که کلا بی خیال استفاده از این حالت شدیم و از UARTآ استفاده کردیم. منتها برای هر ارسال نیم ساعت معطل می شدیم در صورتی که اگر FT2232Hآدرست کار می کرد، کمتر از یک ثانیه اطلاعات منتقل می شدند.
این آی سی حالت های دیگری به غیر از FIFO و UART مانند SPIآ و I2C داره که ما دیگه خودمونو علاف اونا نکردیم.
در آخر این مطلب رو نوشتم که بگم برای کار حرفه ای اصلا از FTDI استفاده نکنین. معمولا روی بردهای حرفه ای از آی سی های Cypress آاستفاده می کنن که بعضی از ورژن های این شرکت هم ممکنه مشکل داشته باشه ولی باز بهتر از FTDI آهستش. آی سی های ا¾Cypressآ هم دارای FIFO هستند که در کنارشون یک میکروکنترلر 8051 هم قرار داده شده. شرکت دیگه ای که آی سی های USB تولید می کنه و توی بعضی بردهای حرفه ای استفاده شدند شرکت NetChipآ هستش.
اگر کسی تجربه ای در این زمینه ها داره لطفا به اشتراک بزاره که بقیه زیاد با این آی سی های مزخرف سر کار نرن!!!
پس از سروکله زدن بسیار با این آی سی به یک مشکل اساسی برخوردیم: شمارنده ی داخلی این آی سی هر 510 بایت یک بار، به اندازه ی 2 واحد افزایش پیدا کرده و یک بایت داده از دست می رود. این مشکل توسط FTDI به صورت مستقیم تأیید نشده و فقط گفته شده که شمارنده دو واحد در بعضی موارد افزایش پیدا می کنه و در ورژن B آی سی این مشکل اصلاح شده. ولی ما از ورژن B استفاده کردیم و مشکل وجود داشت!
مشکل دیگری که با اون روبرو شدیم: در صورتی که ابتدا یا انتهای بسته ی داده، بایت 0xFF داشته باشیم، آی سی Byte Stuffingآانجام داده و یک بایت 0xFF به آن اضافه می کند.
در مورد مشکل اول سعی کردیم بسته های داده را در تعداد کمتر از 510 بایت (مثلا 500 یا 100 بایت) در FIFOآ آی سی FT2232H قرار دهیم و پس از خواندن این بسته، بسته ی بعدی را ارسال کنیم. ولی به مشکل دیگری برخوردیم: آی سی بایت 0x3B را در انتهای بسته های فرد و بایت 0x0F یا 0x0F را در انتهای بسته های زوج جایگزین آخرین بایت می کند. این بود که کلا بی خیال استفاده از این حالت شدیم و از UARTآ استفاده کردیم. منتها برای هر ارسال نیم ساعت معطل می شدیم در صورتی که اگر FT2232Hآدرست کار می کرد، کمتر از یک ثانیه اطلاعات منتقل می شدند.
این آی سی حالت های دیگری به غیر از FIFO و UART مانند SPIآ و I2C داره که ما دیگه خودمونو علاف اونا نکردیم.
در آخر این مطلب رو نوشتم که بگم برای کار حرفه ای اصلا از FTDI استفاده نکنین. معمولا روی بردهای حرفه ای از آی سی های Cypress آاستفاده می کنن که بعضی از ورژن های این شرکت هم ممکنه مشکل داشته باشه ولی باز بهتر از FTDI آهستش. آی سی های ا¾Cypressآ هم دارای FIFO هستند که در کنارشون یک میکروکنترلر 8051 هم قرار داده شده. شرکت دیگه ای که آی سی های USB تولید می کنه و توی بعضی بردهای حرفه ای استفاده شدند شرکت NetChipآ هستش.
اگر کسی تجربه ای در این زمینه ها داره لطفا به اشتراک بزاره که بقیه زیاد با این آی سی های مزخرف سر کار نرن!!!
دیدگاه