آموزش و راه اندازی محصولاتاخبار الکترونیک، رباتیک و تکنولوژیتوسعه دانش

راه اندازی آی‌سی های حافظه فلش سری W25Qxx با avr

در این تحقیق و توسعه قصد داریم، شما را با حافظه های حجیم و بسیار سریع آشنا کنیم و کد راه اندازی حرفه ای اونها رو بهتون ارائه بدیم!

همانطور که می دانید در بسیاری از پروژه ها نیاز به حافظه جانبی است اما در بعضی از پروژه ها ما نیاز به حافظه ای پر سرعت داریم که مقدار حافظه آن نه خیلی زیاد مثل SDCARD و نه خیلی کم مثل آی‌سی‌های EEPROM باشد. اینجاست که می توان به کمک حافظه های فلش در ظرفیت های چند مگابایت ، این خلاء را جبران کرد و پروژه ها را با هزینه کمتری انجام داد.

حافظه های FLASH از نسل EEPROM ها هستن اما با این تفاوت که در حافظه های EEPROM ما کنترل حافظه ها به صورت بایت بایت را داریم، در صورتی که در حافظه های FLASH ما فقط می توانیم مجموعه ای از حافظه را مدیریت کنیم که در ادامه با اشاره به خانواده تراشه 25Qxx به عنوان نمونه بیشتر توضیح خواهم داد.

مشخصات آی‌سی‌های فلش 25Qxx
مشخصات آی‌سی‌های فلش 25Qxx

مشخصات آی‌سی‌های فلش 25Qxx

_ ولتاژ تغذیه بین 2.7 تا 3.6 ولت DC
_ جریان مصرفی کمتر از 4 میلی آمپر
_ محدوده دمایی بین 40- تا 85+ سانتی گراد
_ قابلیت نوشتن و خواندن بیش از 100000 بار
_ بیش از 20 سال زمان نگهداری اطلاعات
_ سرعت انتقال داده بیش از 75MB/s در مدل های مختلف

۱ – معرفی پایه های آی‌سی حافظه فلش 25Qxx

VCC : پایه تغذیه آی‌سی‌که ولتاژ آن بین 2.7 تا 3.6 ولت DC است

GND : پایه زمین یا صفر آی‌سی‌

CS : پایه انتخاب آی‌سی‌( اگر این پایه یک باشد ایسی غیر فعال و اگر صفر باشد آی‌سی‌فعال می شود )

WP : پایه نوشتن محافظت ورودی ( اگر این پایه صفر باشد ما فقط قابلیت خواندن از آی‌سی‌ را داریم و در صورتی که این پایه یک باشد ما قابلیت خواندن و نوشتن از داخل آی‌سی‌ را داریم )

RESET : پایه ریست آی‌سی‌ که با صفر فعال می شود

CLK , Do ,DI : پایه های ارتباط SPI جهت کنترل آی‌سی‌

2 – ترکیب خانه های حافظه در آی‌سی‌های فلش

خانه های حافظه در آی‌سی‌‌های فلش به سه صورت می باشند : بلوک ، سکتور و صفحه

همان طور که در تصویر بالا مشاهده می کنید کل حافظه به بلوک های 64KB تقسیم می شود و هر بلوک به 16 سکتور 4KB سپس هر سکتور به 16 صفحه 256B تقسیم می شود .

به عنوان مثال تصویر بالا خانه های حافظه آی‌سی‌ 25Q128 را نمایش می دهد که تقسیم بندی خانه های حافظه به صورت زیر است :

آی‌سی‌ 25Q128 دارای ظرفیت 128 مگابیت که برابر است با 16 مگا بایت ( 128Mb/8=16MB )

_ تعداد بلوک ها : مقدار کل حافظه آی‌سی‌ تقسیم بر مقدار 64 کیلوبایت : 256 بلوک

_ تعداد سکتورها : مقدار حافظه هر بلوک تقسیم بر 4 کیلوبایت که می شود 16 سکتور به ازای هر بلوک حال  مجموع کل سکتورها برابر است با  4096=16*256

_ تعداد صفحه ها : مقدار حافظه هر سکتور تقسیم بر 256 بایت که می شود 16 صفحه به ازای هر سکتور حال مجموع کل صفحه ها برابر است با 65536=16*4096

3 – نحوه خواندن و نوشتن اطلاعات در آی‌سی‌ فلش

در حافظه فلش به دلیل استفاده از مدارات کمتر، دیگر دسترسی مستقیم به تک تک بایت ها وجود ندارد و باید به صورت مجموعه(صفحه به صفحه) آنها را کنترل کرد .

برای مثال اگر ما بخواهیم بایت دهم از حافظه را بخوانیم چون این بایت در صفحه صفر است ما باید کل این صفحه را که 256 بایت است را بخوانیم و سپس درون یک متغیر 256 بایتی بریزیم بعد از بایت دهم استفاده کنیم .

برای نوشتن اطلاعات نیز ما نمی توانیم به صورت بایت بایت اطلاعات را از روی آی‌سی‌ فلش بخوانیم و خواندن دیتا باید بصورت صفحه ای ( 256 بایتی ) صورت بگیرد .

نکته مهم : ما نمی توانیم دوبار روی یک صفحه اطلاعات بنویسم باید ابتدا اطلاعات صفحه را پاک کنیم و مجددا روی آن صفحه عملیات نوشتن را انجام دهیم .

4 – نحوه پاک کردن اطلاعات در آی‌سی‌ فلش

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

_ پاک کردن اطلاعات به صورت سکتور ( 4 کیلوبایتی )

_ پاک کردن اطلاعات به صورت بلوک ( 32 کیلوبایتی )

_ پاک کردن اطلاعات به صورت بلوک ( 64 کیلوبایتی )

_ پاک کردن اطلاعات به صورت کلی

نکته مهم : در آی‌سی‌ فلش ما قادر نیستیم تا اطلاعات را بصورت بایت به بایت پاک کنیم .

5 – نحوه اتصال حافظه فلش به میکروکنترلر

نکته : پایه های RESET و WP را در صورتی که نیازی به کنترل نداشته باشید می توانید به مثبت VCC متصل کنید .

6 – برنامه نویسی

تیم فنی پژوهشگران الکترونیک و رباتیک برنامه ای در کامپایلر کدویژن آماده کرده است که شما به راحتی می توانید با آی‌سی‌ فلش ارتباط برقرار کنید.

پروتوتایپ توابع آماده شده توسط تیم پژوهشگران به صورت زیر است:

unsigned int W25Q_Read_Manufact_Device_ID(void);
void W25Q_Disable_Write(void);                         
void W25Q_Enable_Write(void);
unsigned char W25Q_Read_StatusReg(unsigned char RG);
void W25Q_WaitBusy(void);
void W25Q_WritePage(unsigned long int  NumPage);
void W25Q_ReadPage(unsigned long int  NumPage);
void W25Q_EraseSector4KB(unsigned long int address); 
void W25Q_EraseBlock32KB(unsigned long int address);  
void W25Q_EraseBlock64KB(unsigned long int address);    
void W25Q_EraseChip(void);

_ عملکرد تابع (unsigned int W25Q_Read_Manufact_Device_ID(void  :

این تابع شماره کارخانه و دستگاه را به ما می دهد.

ID=W25Q_Read_Manufact_Device_ID(); 
ManuFacturerID=)ID&0xFF);
DeviceID=(ID>>8)&0xFF);

برای مثال مقدار شماره کارخانه برابر 0xEF و شماره دستگاه برای آی‌سی‌ 25Q128 برابر 0x17 می باشد .

_ عملکرد تابع (void W25Q_Disable_Write(void  :     غیرفعال کردن عملیات نوشتن

_ عملکرد تابع (void W25Q_Enable_Write(void  :      فعال کردن عملیات نوشتن

_ عملکرد تابع (unsigned char W25Q_Read_StatusReg(unsigned char RG  :

یکی از مهمترین رجیسترهای آی‌سی‌ فلش، رجیستر وضعیت است که به کمک آن می توانید وضعیت، رایت کردن، مشغولی، وضعیت های امنیتی آی‌سی‌ و … را ببینید .

_ عملکرد تابع (void W25Q_WaitBusy(void  :      چک کردن وضعیت مشغول بودن آی‌سی‌ فلش

_ عملکرد تابع (void W25Q_WritePage(unsigned long int NumPage :      تابع نوشتن اطلاعات به صورت 256 بایتی روی حافظه فلش

_ عملکرد تابع (void W25Q_ReadPage(unsigned long int NumPage :      تابع خواندن اطلاعات به صورت 256 بایتی از روی حافظه فلش

_ عملکرد تابع (void W25Q_EraseSector4KB(unsigned long int address :      پاک کردن اطلاعات آی‌سی‌ به صورت سکتوری

_ عملکرد تابع (void W25Q_EraseBlock32KB(unsigned long int address :      پاک کردن اطلاعات آی‌سی‌ به صورت بلوک های 32 کیلو بایتی

_ عملکرد تابع (void W25Q_EraseBlock64KB(unsigned long int address :      پاک کردن اطلاعات آی‌سی‌ به صورت بلوک های 64 کیلو بایتی

_ عملکرد تابع (void W25Q_EraseChip(void  :      پاک کردن تمام اطلاعات آی‌سی‌

در انتها برنامه نمونه ای که توسط تیم فنی ما آماده شده را در زیر مشاهده می کنید که با فرمان دادن از طریق پورت سریال شما می توانید تمام توابع را اجرا کنید به عنوان مثال با ارسال کد  i\r* مقدار شماره دستگاه و کارخانه برگردانده می شود.

    ID=W25Q_Read_Manufact_Device_ID(); 
    printf("ManuFacturer ID : ");
    putchar(ID&0xFF);
    printf(" & ID Device ID : ");
    putchar((ID>>8)&0xFF);
    putchar('\r');

_ با ارسال کد s\r* مقدار رجیستر وضعیت برگردانده می شود .

_ با ارسال کد e\r* سکتور 4 کیلو بایتی اول پاک می شود .

_ با ارسال کد w\r* اطلاعات در صفحه اول نوشته می شود .

_ با ارسال کد r\r* اطلاعات صفحه اول خوانده می شود .

فایل های مورد نیاز راه اندازی آی‌سی‌های فلش سری W25Qxx :

تمامی محصولات نرم افزاری سایت شامل خدمات پشتیبانی میباشند و در صورتی که آپدیت ارائه شود، به صورت رایگان برای خریداران قبلی نیز ارسال میشود. در صورت وجود هرگونه مشکل در سورس میتوانید از بخش “نظرات” و یا “تماس با ما” با ما در ارتباط باشید.

سوالی داشتید، در قسمت نظرات بپرسید، کارشناسان فنی پژوهشگران در اسرع وقت پاسخگو خواهد بود.

تیم فنی پژوهشگران

ما گروهی از اعضای قدیمی پژوهشسرای رباتیک مشهد مربوط به سالهای دهه 80 و... هستیم، دور هم جمع شدیم و قصد داریم نتایج R&D خود را در پژوهشگران به تألیف درآوریم...

نوشته های مشابه

‫23 دیدگاه ها

  1. سلام وقت بخیر من به عنوان یک پروژه باید یک فلش مموری usb بسازم و روی ای سی اون یه برنامه بریزم ( هر چی میتونه باشه) که با فرمت شدن فلش هم پاک نشه کسی میتونه کمکم کنه

  2. سلام، ممنون از مطالب مفیدتون. من برنامه رو خریداری کردم اما چون در این زمینه کار نکردم میخواستم بپرسم در برنامه، در قسمت نوشتن داده روی حافظه دقیقا دارید چه داده ای رو ارسال میکنید؟؟

  3. عرض سلام و خسته نباشید
    همسر من تو کار عروسک سازی هست و میخواهیم عروسک ها رو صدا دار کنیم. مثلا بتونه گریه کنه یا اگر بشه متن مختصری رو ضبط کنیم تا اونو بخونه
    میخواستم راهنمایی کنید چطور میشه اینکار رو کرد
    یکم وبگردی کردم فهمیدم که با استفاده از کیت صدا میشه همچین کاری کرد اما حقیقتش چون دانشی نسبت به این کارهای فنی نداریم متوجه نشدم
    ممنون بابت راهنماییتون
    تشکر

  4. باسلام.من تعمیرکاردستگاه دیجیتال و رسیور هستم.من تازه واردقسمت نرم افزارشدم.برای پروگرم کردن آی سی فلش های سری25q32 بیشتر.یه پروگرمر قیمت پایین گرفتم.ch341.ولی متاسفانه این پروگرمر شناسایی خودکارآی سی نداره.پروگرامرهای Tnmهم خیلی گرونه.میخواستم اگه ممکنه طریقه خواندن آی سی های سری25Q32یا16روبگید..مثلا روی آی سی نوشته… 25Q32Lc..البته چندتاحرف دیگم داره.میخام بدونم اون حرفهای بعد از 32چه معنی داره.وآیا وقتی میخوام توی نرم افزار پروگرمر شماره آی سی رو وارد کنم حتما اون حرف های بعدشم مهمه یا فقط همون 25Q32کافیه?خواهش میکنم راهنماییم کنید.

  5. با عرض سلام وقت بخیر
    یه سوال داشتم خدمتتون
    من از این آی سی استفاده می کنم و برای پروگرام کردن اون از پروگرامر TNM استفاده می کنم.
    اما مشکلی که دارم اینجاست که وقتی می خوام به صورت ISP پروگرام کنم قطعه رو نمی شناسه
    می تونین منو راهنمایی کنین؟

  6. درود برتیم خوب ودوست داشتنی
    بنده تازه با این ای سی فلش سری 25Lوسری25Qآشناشدم وبدنبال مطالب آموزشی هستم;بهترین توضیح را دراین سایت دیدم.
    یک راهنمایی بفرمایید. برای پروگرام کردن این مدل ایسی چه پروگرامی پیشنهادمیکنید؟یابسازم واگر قیمت مناسب باشهخریداری کنم.
    محمدی هستم اراک تعمیرات بُرد انجام میدم
    شماره همراه بنده 0918xxx19

دیدگاهتان را بنویسید

دکمه بازگشت به بالا