PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : کول دیسک



omid_safari
30-03-2010, 05:57
سلام دوستان
من میخوام بدونم کول دیسک هایی که به پورت usb کامپیوتر وصل میکنیم رو چطور باید به میکروکنترلر متصل کرد؟
ram sd نحوه ارتباطش با میکرو مثل کول دیسک هست یا فرق میکنه؟
مگه هر دو از spi استفاده نمیکنن؟



ممنون

farzadsw
30-03-2010, 16:06
نه با sd فرق داره
برای اینکه دستگاه usb رو به میکروتون وصل کنید باید USB HOST Controller داشته باشه . که اغلب میکرو های آرم 7 ندارن و USB Device Controller دارن یعنی خودشون به عنوان دستگاه به بقیه وصل میشن.
کول دیسک ها از طریق پورت usb و کلاس mass storage به کامپیوتر یا میکرویی که usb host داره وصل میشن.
مثلا آرم 9 و بالاتر این قابلیت رو دارن (بعضی از آرم های 7 هم این امکان رو دارن)

omid_safari
30-03-2010, 23:37
در arm7 ازهمون پورت usb که برای پروگرامر usb استفاده میشه میتونیم برای ارتباط usb هم استفاده کنیم؟
یه نوع تبدیل تو بازار هست که sd memory رو تبدیل به usb میکنه. مثلا برای ارتباط رم دوربین های دیجیتالی یا موبایل به کامپیوتر.خیلی هم کوچیک هست و قیمت بالایی هم نداره برای همین فکر کردم فقط سوکت ها رو تبدیل میکنه و داخلش آی سی نداره.

omid_safari
30-03-2010, 23:58
اطلاعات تخصصی در مورد توسعه sd memory
You can see links before reply

آیا سوکت sd-memory برای نصب روی pcb در بازار تهران به راحتی پیدا میشه؟ قیمتش چنده؟

farzadsw
31-03-2010, 01:28
آره از همون پورت میتونید استفاده کنید. (ولی همونطور که گفتم usb host controller نداره)
اون وسیله ها هم اسمشون ram reader هست که قیمتشون هم ارزونه ولی داخلشون مدار و چیپ داره ، همینجوری تبدیل نمیشه.
سوکت مموری sd هم تو باازر فراوان هست حدود 1000 تومن .

omid_safari
31-03-2010, 10:50
دیشب تا صبح در مورد ارتباط فلاش مموری با sam7s64 تحقیق کردم. خلاصه خدمتتون عرض میکنم.
اینکه usb host رو نمیشه با آرم64 راه انداخت بخاطر کمبود حافظه است چون باید انواع و اقسام دیوایس ها از فلاش مموری تا موس و جوی استیک و بلوتوس رو شناسایی کنه. اما اگه بخواهیم فقط کول دیسک رو بهش متصل کنیم مشکلی در مورد حافظه نخواهیم داشت. چون نیاز به تشخیص نوع دیوایس متصل شده و غیره نداریم.
روش دیگه اینکه از طریق دستورات سطح پایین آدرس بلوک و فرمان خواندن رو میدیم و دیتا رو دریافت میکنیم که برای اینکار باید به رفرنس تکنیکال mass storage usb دسترسی داشته باشیم.
ضمن اینکه چون در خارج از کشور محدودیت برای تهیه آی سی وجود نداره از آرم9 برای اینکار استفاده میشه و کل کتابخانه usb host رو لود میکنن. به همین دلیل این پروژه تا به حال انجام نشده و ارزش کار داره.
البته یه مورد بورد آرم64 روسی دیدم که سازنده امکان اتصال کول دیسک رو براش ایجاد کرده بود.
اگه از نظر شما شدنی هست بفرمایید شروع کنیم.

farzadsw
31-03-2010, 18:53
کنترلر usb دو دسته هست ، یکی device و یکی host . مثلا کامپیوتر شما host رو داره و آرم 7 device رو داره. بعضی ها هم جفتشون رو دارن (otg ) مثل آرم 9 .
همونطور که میدونید سری مگا ی avr هیچ کدوم از این دوتا رو نداره ، اما با این وجود میشه به صورت نرم افزاری usb device controller رو شبیه سازی کرد. فرق یه usb device controller واقعی (سخت افزاری ) با نرم افزاری اون چیه؟ اول تو سرعت ارتباط هست و دوم سختی کار هست و سوم منابعی که از میکرو مصرف میشه(cpu load , ram,rom). اصولا همه پروتکل ها رو میشه به صورت نرم افزاری ایجاد کرد. مثل ایجاد psi ,i2c ,... فقط با صفر رو یک کردن پایه های i/o .
حالا اون usb host برای arm7 هم همینطوره. میشه به صورت نرم افزاری این کار رو کرد ولی قطعا بازده مناسبی نداره . مخصوصا اینکه برای mass storage مهمترین پارامتر سرعت انتقال اطلاعاته با این روش سرعت بسیار پایین خواهد بود اما شدنی هست.

تو خارج اینطور نیست که برای usb host فقط برن سراغ آرم9 ، چیپ های usb host به صورت جدا گانه وجود داره که از طریق پروتکل های مختلفی مثل spi با میکرو ارتباط برقرار میکنه.

omid_safari
01-04-2010, 05:29
ممنون از توضیحات خوبتون.
حتما میدونید که آرم64 دارای امکان ارتباط با هاست یو اس بی ورژن 2 هست. پس امکان تبادل دیتا با این سرعت رو داره - یعنی هم دریافت و هم ارسال دیتا. فقط جهت درخواست هست که در هاست و دیوایس فرق میکنه. فرض کنید ما دیوایس رو با آرم64 راه انداختیم (میدونید که بدون مشکلاتی که در پست قبل ذکر کردید شدنی هست)
مثلا :
پس از برقراری اتصال - هاست منتظر میشه (یا با فرستادن کد درخواست میده) تا دیوایس خودشو معرفی کنه.
اینجا دیوایس ما PID و مشخصاتش رو ارسال میکنه و معلوم میشه که یک کول دیسک هست. پروتوکول هم در هر دو طرف یکسان هست و چه هاست باشه و چه دیوایس موقع انتقال دیتا بار اضافی به هیچ کدام تحمیل نمیشه و هر دو به یک اندازه درگیر هستند.

در نتیجه تفاوت هاست و دیوایس فقط در این است که ابزار ما دستور رو ارسال میکنه یا دریافت(ارسال=هاست - دریافت = دیوایس)
جالب اینجاست که دستورات هم در هرو یکی هستند! فقط باید الگوریتم برنامه عوض بشه. مثال:


DeviceConnect()
{
send_my_id();
}

get_command()
{
if(command=A) return A&2;
if(command=B)return(B*4;
}

تبدیل به :



DeviceConnect()
{
Get_device_id();
}

send_command(X)
{
send x
}



با این روش میتونیم برای هر نوع دیوایسی هاست انحصاری خودش رو ایجاد کنیم بدون کم شدن کارایی پردازنده و بدون نیاز به سخت افزارهای اضافی.

اون مورد ارتباط avr با usb رو من خیلی وقت پیش انجام دادم البته نه با usb2 - اما انجام این پروژه درحال حاظر کار من نیست چون هنوز یادگیری آرم رو تموم نکردم و خودتون بهتر میدونید که انواع مختلف دیوایس ها هرکدوم راه اندازی منحصربفردی داره. ولی اگه بچه های این انجمن یک یا چند تیم برای ساخت دیوایس های مختلف ایجاد کنن یک دنیای جدیدی به رومون باز میشه (هاست انواع ابزارهای USB) و بی نهایت کاربرد خواهد داشت خصوصا با این قیمت ناچیز چین هم به پامون نمیرسه. حتما ایده های تولید محصولاتی هم پدید میاد و برامون درآمدزایی میشه. یکیش مودم اکسترنال - یا گیم های تلویزیونی که با جوی استیک کار کنن. اتصال به انواع دوربینهای دیجیتال و موبایلها - ارتباط با بلوتوث و جی-پی-اس مودم و غیره....
دروازه همه ابزارهای تکنولوژی پیشرفنه USB Host هست.

برای شروع کافیه که مثال های خود شرکت اتمل در مورد usb رو الگوریتمش رو وارونه کنیم.

خودم دهنم آب افتاد :o

farzadsw
02-04-2010, 02:48
دوست عزیز این مطلب که میفرمایید رو من اصلا نمیتونم قبول کنم . به فرض که ما هیچ اطلاعی از پروتکل usb و استک حجیمی که براش هست نداریم . اگه اینقدر ابتدایی و ساده میشد از usb device controller به جای usb host controller استفاده کرد ، الان همه موبایلها این قابلیت رو داشتن و در OTG هم تخته میشد . اونم الان نه همون 10 سال پیش !
اینقدر هم با اطمینان این مطالب رو میگید که من شک کردم ! رفتم یه جستجویی کردم هیچی پیدا نکردم :
You can see links before reply

اگه منبع معتبری دارید ،اینجا بگذارید ، تا ما هم از این غفلت بچه گانه بیرون بیایم!

omid_safari
02-04-2010, 19:15
usb مخفف universal serial bus هست.
هاست کارش اینه که دستورات رو روی باس قرار میده و نتیجه برگشتی رو میخونه و دیوایس هم اونها را رو دریافت و اجرا میکنه و نتیجه رو روی باس قرار میده.
البته هاست یک کار دیگه هم میکنه و اون تعیین پیکر بندی ارتباط هست مثل طول بایت ها در هر پاکت و غیره.

شما دستورات رو روی باس قرار بده و منتظر نتیجه برای خواندن باش. خود به خود به هاست تبدیل میشی. کار خارق العاده ای لازم نیست انجام بدی!
You can see links before reply

omid_safari
02-04-2010, 20:17
رفرنس اطلاعاتی که برای اتصال کول دیسک به میکرو مورد نیاز است:

You can see links before reply

omid_safari
02-04-2010, 21:51
نمونه خارجی
You can see links before reply

You can see links before reply


یک کتاب تخصصی USB

USB Complete Everything You Need to Develop Custom USB Peripherals 3rd edition
By Jan Axelson
You can see links before reply

farzadsw
03-04-2010, 02:58
usb مخفف universal serial bus هست.
هاست کارش اینه که دستورات رو روی باس قرار میده و نتیجه برگشتی رو میخونه و دیوایس هم اونها را رو دریافت و اجرا میکنه و نتیجه رو روی باس قرار میده.
البته هاست یک کار دیگه هم میکنه و اون تعیین پیکر بندی ارتباط هست مثل طول بایت ها در هر پاکت و غیره.

شما دستورات رو روی باس قرار بده و منتظر نتیجه برای خواندن باش. خود به خود به هاست تبدیل میشی. کار خارق العاده ای لازم نیست انجام بدی!
You can see links before reply
usb یه پروتکل p2p نیست که هاست و دیوایس فرقی با هم نداشته باشن و مثلا اونطور که قبلا گفتید جای دستور ها رو عوض کنیم تموم شه بره . در ضمن تو همه پروتکل ها اینطوریه که هاست یا مستر اطلاعات رو میگذاره رو باس و دیوایس یا اسلیو اونا رو میخونه و نتیجه رو میده ! فرق بین پروتکلها تو اینه که چطوری این اطلاعات رو رو باس بگذارن و از باس بخونن. usb یکی از پروتکلهای هست که این کار رو به صورت پیچیده ای انجام میده و
همین لینکی که گذاشتید ، هیچ ربطی به تبدیل usb device به usb هاست نداره . تو اون اومده گفته برای یه میکروی پیک که اصلا usb نداره ، چطوری ارتباط usb deviceرو ایجاد کنیم . اون همه کدی هم که میبینید برای همینه .



رفرنس اطلاعاتی که برای اتصال کول دیسک به میکرو مورد نیاز است:

You can see links before reply


شاید اشتباه کنم ولی به نظر میاد هیچ کدوم از این لینک هایی رو که گذاشتید خودتون حتی به طور اجمالی نخوندین .
این لینک داره کلاس mass storage ، یکی از بخش های پروتکل usb رو توضیح میده نه اینکه چطوری یه cool disk رو به میکرو وصل کنید o_O



نمونه خارجی
You can see links before reply

You can see links before reply


اون اولی که یه خبر در باره اینه که فلان شرکت ، یه برنامه ( class driver ) برای میکرو های مختلف نوشته که وقتی میکروتون رو به کامپیوتر (همون هاست) وصل میکنید ، کامپیوتر اونو به عنوان کارت شبکه شناسایی میکنه . کجای این مطلب اصلا در مورد هاست صحبت شده که حالا شما میگید نمونه خارجی؟

اون لینک دومی هم یه استک برای usb host هست . این استک ها رو معمولا شرکت های سازنده چیپ خریداری میکنن و تو محصولشون میگذارن . مثلا میکرویی که usb device داره داخل خودش usb device stack هست که اون با سخت افزارش کلا میشه usb device controller . اون استک رو در اختیار من و شما نمیگذارن . اگر هم اپن سورس باشه و شما تو میکروتون استفاده کنیدش میشه همون شبیه سازی که قبلا گفتم :

میشه به صورت نرم افزاری این کار رو کرد ولی قطعا بازده مناسبی نداره . مخصوصا اینکه برای mass storage مهمترین پارامتر سرعت انتقال اطلاعاته با این روش سرعت بسیار پایین خواهد بود اما شدنی هست.

من نمیگم شما دنبال این کارا نرو ، بحث من سر این بود که شما گفتی خیلی راحت (بعضا با جابه جایی ترتیب دستورات) میشه این کار رو کرد و سرعت و کیفیت ارتباط هم خیلی مطلوب خواهد بود.


یک کتاب تخصصی USB

USB Complete Everything You Need to Develop Custom USB Peripherals 3rd edition
By Jan Axelson
You can see links before reply
این کتاب رو من قبلا لازم داشتم و گرفته بودم ؛ نیازی نیست که کتاب رو کامل بخونید ، فقط فهرست رو که نگاه کنید متوجه میشید این کتاب در مورد چطوری نوشتن برنامه .net برای ارتباط با usb هست ، اونم برای کامپیوتر .(البته قاعدتا چند فصل اولش رو در مورد خود پروتکل usb صحبت کرده)

omid_safari
03-04-2010, 14:03
خیلی ممنون از وقتی که گذاشتید.
من فکر کردم اگه قرار باشه فقط یک دیوایس به هاست ما متصل بشه پس میشه به صورت p2p ارتباط برقرار کرد. و چون فقط از یک کلاس مثلا mass storage استفاده میکنیم به حافظه دیتا و پروگرام زیادی هم نیاز نخواهد بود و به stack هم احتیاج نداریم. فقط یک بافر FIFO حداکثر 512 بایتی برای ارتباط با دیوایس کافی هست.
مثل همون کاری که OTG انجام میده با این تفاوت که OTG از چندین پروتوکول حمایت میکنه و چون در زمان اجرا ممکنه هر نوع دیوایسی بهش متصل بشه در نتیجه همه کلاسها رو باید به کد نهایی لینک کنه.

حالا من یک فکر بهتری دارم.
اگه سورس کتابخانه usb host برای arm9 رو داشته باشیم میشه با حذف کلاسهای اضافی و کمپایل مجدد اون رو برای arm7s قابل استفاده کنیم.

armstk
03-04-2010, 14:50
توی میکرو های Arm9 به صورت سخت افزاری usb host رو قرار دادن که زیاد مزاحم cpu نشه برای همین استفاده ازش رو ساده تر میکنه در صورتی که در arm7 اصلا usb host رو قرار ندادن و باید به صورت نرم افزاری براش به برنامه ایجاد کرد که فکر میکنم این کار ناشدنی هستش و مطمئنا قسمت زیادی از cpu رو اشغال میکنه
راهی که کارمون رو ساده تر میکنه اینه که یک چیپ usb host رو استفاده کنیم که کار رو خیلی ساده تر میکنه
حتی من شخصی رو دیدم که اطلاعات رو از یک کول دیسک و avr میخوند با استفاده از یک چیپ دیگه
مثلا چیپ VNC1L-1A ماله ftdi هستش که تو ایران هم هستش و جوان هم داره قیمتش 15 تومنه و اگر اشتباه نکرده باشم از طریق spi با میکرو ارتباط برقرار میکنه

omid_safari
29-04-2010, 17:51
سلام
نظورتون در مورد ساخت یک کول دیسک توسط AT91SAM7 چی هست؟ تبدیل یک مموری mmc/sd به کول دیسک.
فکر نمیکنم مشکلی داشته باشه. توی اینترنت هم نمونه اش نیست.

farzadsw
29-04-2010, 18:20
این تبدیل SD به کول دیسک ، تولید انبوه شده و براش چیپ ASIC هم ساختن . یعنی دوباره کاری هست . درضمن سرعت usb اکثر آرم7ها ، full speed هست نه high speed در صورتی که رم ریدر های موجود در بازار همه high speed هستن. قیمشتون هم تقریبا اندازه یدونه سوکت mmc هست ، دیگه میکرو و برد و بقیه قطعاتش جدا !

اما چون به ارتباط usb میکرو و کامپیوتر علاقه دارید ، فکر کنم رو یکی از اینا کار کنید خیلی بهتره:
1. data-logger : که اطلاعات یه سنسور (میتونه دما ، رطوبت و .... باشه) رو هر چند دقیقه (یا ثانیه) میخونه و ثبت میکنه . بنابراین میتونه اطلاعات 1 روز یا هفته یا ماه یا حتی سال رو ذخیره کنه و بعدا به کامپیوتر وصل بشه و تو کامپیوتر نمودار های اون کشیده بشه و کارهای لازم انجام بشه .

2. پروگرمر : رو خود میکروکنترلر یه برنامه ریخته میشه که با هر بار اتصال اون به کامپیوتر ، به عنوان یه فلش مموری شناخته میشه . از این طریق میشه فایل hex ,binary برنامه بعدی رو همون درایو فلش مموری کپی کرد و وقتی که میکرو ریست میشه خودش رو پروگرم میکنه ! بدون نیاز به نرم افزار خاصی یا برد خاصی ! به همین سادگی !


از بین این دوتا اولی راحت تر هست.

من خودم تا تابستون زیاد وقت خالی ندارم ، وگرنه یکیش رو انجام میدادم . (شایدم انجام بدم !)

omid_safari
29-04-2010, 20:59
خب این پروژه دوم با mmc انجام بشه خیلی بهتره. میشه عکس رو یا فایل صوتی و مالتی مدیا و غیره ریخت توش و با میکرو اجراش کرد.
حلا چکار باید کرد؟

farzadsw
30-04-2010, 01:33
این mmc که میگید ، کلا میشه یه چیز دیگه . برای mmc و فایل سیستم fat مطلب زیاده.
من منظورم این بود که مثل سمبا وقتی میکرو رو به کامپیوتر وصل کنی ، بتونی پروگرمش کنی ولی با این تفاوت که اولا نیازی نیست هر سری میکرو رو خاموش کنی ،جامپر رو برداری و..... . هر وقت میکرو به کامپیوتر وصل بشه پروگرم میشه . ثانیا نیازی به نرم افزار خاصی نیست . شما همونطوری که یه فایل رو تو کول دیسک (درایو و فولدر) کپی میکنید ، با یه درگ و دراپ فایل hex رو بریزید تو میکرو .