Тепер нам потрібно буде наборот НЕ дригати ніжками, а відстежувати їх стан. Насамперед створимо позитивний фронт, виставивши високий рівень на ніжці 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. Відкриємо приклад в даташіте У кожної команди є індекс. У даній команди індекс 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)Схожі статті