LPCXpresso Урок 11
Използваме схемата от предишния урок с USB конектора и добавяме връзката на картата. За да направим това, трябва да съберем следната схема:

Можете да запоявате проводниците или директно към картата, което не е жалко, или както използвам слота за карта. Горната схема е еднаква както за SD, така и за MMC карти. Всички ненужни (не показани) щифтове на MMC карти остават несвързани.
Промяна на кода
Няма да си поставяме цели за универсалност. Ще направим код за конкретна карта с памет (размер на картата). Като основа за този проект ще вземем пример от предишния урок и ще го усъвършенстваме. Преразглеждането ще се извърши, както следва:
- Настройка на SPI
- Код за работа с карта с памет
- Подобряване на функциите за четене/запис на USB-диск
Освен това трябва да изтрием това, от което не се нуждаем. В директорията src проект, изтрийте файла diskimg.c и в директорията вкл файл diskimg.h, от вече не ни трябват. За да направите това, извикайте контекстното меню на файла и изберете елемента Изтрий. На въпрос дали да изтрием файл от файловата система, отговаряме положително.
Настройка на SPI
В проекта (не в библиотеката, тъй като не сме го включили тук) създайте файл ssp.h със следното съдържание:
Тъй като картата с памет трябва да бъде инициализирана на 400 kHz и може да работи на 20 MHz, ще напишем функцията за инициализация с един параметър, който задава бавния/високоскоростен SPI режим.
Създайте файл ssp.c с изпълнението на функции. След като свържете заглавните файлове, добавете функции за избор на устройство.
Изходен файл ние пишем ssp.c и щракнете завършек.
Нуждаем се от тези функции, защото няма да използваме наличния хардуерен контрол, а сами ще изберем картата (поради някои ограничения в протокола за работа с карта с памет).
След това нека приложим функцията за прехвърляне. В него просто въвеждаме данни за прехвърляне в регистъра за данни DR на контролера SPI. След това контролерът SPI автоматично стартира цикъла на обмен. Трябва само да изчакаме да завърши, което ще бъде отчетено от втория бит в регистъра SR на контролера SPI. В края на обмена извличаме получените данни от регистъра за данни DR на контролера SPI и ги връщаме в резултат на функцията.
Сега нека да стигнем до функцията за инициализация:
В допълнение към вече известните разрешения за работа, подаване на часовника и избор на функции за работа с периферни устройства за изходи, ние също имаме:
- настройка в регистър SSPCLKDIV делител на часовника за SPI контролера (настройка на честотата на SPI контролера) на 10 или 1, в зависимост от необходимия режим;
- настройка в регистър CR0 пакетен формат (за подробности в документацията за контролера) и допълнителен делител (настройка на честотата на тактовата линия на SPI) на 8 или 1, в зависимост от необходимия режим;
- настройка в регистър CPSR честотен делител за референтната честота на тактовата линия SPI до минимална стойност 2;
- премахване на боклука от буфера за получаване на SPI;
- настройка в регистър CR1 работа на контролера в режим "master" и по този начин дава възможност за работа на SPI контролера;