Avr урок 33

Тепер нам потрібно буде наборот НЕ дригати ніжками, а відстежувати їх стан. Насамперед створимо позитивний фронт, виставивши високий рівень на ніжці SCK

PORTB | = (1<

Зрушуємо result вліво на 1 пункт, щоб підготувати місце для нового біта. Якщо це буде найперший цикл, то нічого страшного, у нас дана змінна все одно в нулі, тому не будемо складати якихось умов

PORTB | = (1<

result <<=1; //сдвигаем влево байт, чтобы записать очередной бит

Тепер, у разі якщо у нас рівень на ніжці MISO дорівнює 1, то Запша її в правий біт змінної ewsult

result <<=1; //сдвигаем влево байт, чтобы записать очередной бит

if ((PINB (1<

result = result | 0x01; // запишемо лічений з лапки порту MISO біт

Потім негативний фронт на SCK і чекаємо 1 такт

result = result | 0x01; // запишемо лічений з лапки порту MISO біт

(1<

asm ( "nop"); // 1 такт почекаємо

Завершимо цикл і повернемо результат з функції

asm ( "nop"); // 1 такт почекаємо

return result; // повернемо результат

Тепер нам потрібно написати функцію передачі команд в SD.

Відкриємо приклад в даташіте

Avr урок 33

У кожної команди є індекс. У даній команди індекс 8, так як вона іменується CMD8. Також існують відмінності в типах команд. Але про це потім, нас поки цікавить саме такий тип, причому саме цю команду нам потім також доведеться передавати.

Ми бачимо що передача команди складається з 48 біт, тобто з 6 байтів. Перший рядок показує позицію біта в команді, друга - величину параметра в бітах, третя - значення, а четверта - роз'яснення параметра.

Стартовий біт - завжди 0.

Біт передачі - 1.

індекс команди - в разі даної команди дорівнює 8.

потім йдуть зарезервовані біти - цілих 20 штук, всі рівні нулю.

Потім йдуть параметри, 7 біт контрольної суми і стоповий біт - завжди 1.

Тому нам потрібно буде написати функцію передачі команди

Напишемо її після наших функцій передачі і прийому байтів, так як нова функція цими функціями буде користуватися

unsigned char SD_cmd (char dt0. char dt1. char dt2. char dt3. char dt4. char dt5)

Ось скільки параметрів. Прямо як у нас байтів в команді. Потім ми про них дізнаємося більше

unsigned char SD_cmd (char dt0. char dt1. char dt2. char dt3. char dt4. char dt5)

Схожі статті