IAR EW ARM працює з файловою системою FAT на картках SD

Проект призначений дляIAREmbedded Workbench for ARM 5.20 та налагоджувальної платиOlimex SAM7-EX256(хоча може працювати і на будь-якому іншому пристрої з мінімальною косметичною правкою).

Тут демонструється читання файлової системи картокSD/MMCза допомогою бібліотеки EFSL (див. [6]). КарткаSDпідключена доSPI0мікроконтролераAT91SAM7X256(так само, як у прикладі USB Mass Storage Device). У мене заробила SD-картка на 512 мегабайт, а на 16 мегабайт картка MMC чомусь не заробила. Помилка була не в карті і не в послідовному інтерфейсі, оскільки Mass Storage Device на цій карті працювало, і обсяг картки визначався правильно. Щось не склалося вEFSL(може, через файлову системуFAT12?).

файловою

системою

Приклади варіантів підключення картки SD/MMC до мікроконтролера ARM7 (AT91SAM7X128, AT91SAM7X256, AT91SAM7X512) наведено в таблиці нижче. Можна підключити картку або доSPI0, або доSPI1. Наприклад, у макетній платіOlimex SAM7-EX256використовується варіант 1 підключення картки SD/MMC. Для макетної плати AT91SAM7X можна вибрати будь-який варіант підключення, відповідним чином настроївши порти та SPI. Для підключення сигналу вибірки

CS існує ще більше варіантів, тому що кожен із SPIn має по 4 апаратні виходи вибірки.

Щоб запрацювати індикаційний світлодіод, що показує звернення до картки (він підключений до ніжки 66 процесора), не забудьте ввести макровизначенняOlimexDBG. Поведінка бібліотеки EFSL налаштовується у файлі efsl_0_2_7\inc\config.h. Проект потрібно компілювати для роботи у flash (чомусь у sram у мене бібліотека EFSL глючила), і розмір HEAP треба задати не менше 0x1200 байт, інакше виклики підпрограм бібліотекиEFSL будуть проводити вивалення в Undefined_Handler. Бібліотека EFSL, як з'ясувалося, штука досить примхлива. Завантажити проект arm-basic-efsl можна тут.

Щоб EFSL запрацювала на будь-якій платформі, не тільки ARM (кажуть, що EFSL працює на PC (GNU/Linux, середовище розробки), TMS C6000 DSP від ​​Texas instruments та ATMega від Atmel), потрібно виконати таке: 1. Додати код низького рівня, який пише та читає 512-байтовий сектор біля картки SD/MMC. 2. Для роботи безпосередньо EFSL (крім пам'яті, яка піде на основну програму) потрібно 1 кбайт RAM, решта RAM може використовуватися додатково як кеш (що більше кеш, то вища швидкодія). Ця вимога, напевно, найжорсткіша - тут відсівається відразу багато різновидів мікроконтролерів. 3. Пострибати з бубном навколо файлу config.h та опцій компіляції (налаштування HEAP, оптимізація коду тощо), щоб бібліотека нарешті запрацювала.