Hedhehog

Работа С Картой Sd В Режиме Spi(Без Использования Fatfs)

16 сообщений в этой теме

Hedhehog    0

Форумчане, прошу помощи. Задача следующая: наладить связь между контроллером и флеш картой в режиме SPI, при этом когда будет производится запись данных файловая система не является необходимостью. Контроллер Xmega64A3. Флеш карта SDHC 4GB.

Для того, чтобы перевести флеш карту в режим инициализации, необходимо подать команду CMD0, приведенную в даташите на стандарт SD. Я отправляю эту команду, ловлю ответ (что характерно он таки есть) R1=0x20, т.е. Address error. И тут собственно вопрос: откуда эта ошибка возникает, может кто-нибудь сталкивался, знает как устранить.

Сразу скажу, код не выложил потому, что даже не предполагаю, где может быть ошибка.

Частота клока SPI 250кгц.

Частота клока контроллера 14,7мгц.

P.S. Прошу не сильно пинать, если тему сильно похожую создал или сообщение коряво написал-только осваиваю для себя форумы. :yes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Vovka    23

Вот правда для PIC, но там есть ссылки и для других МК: http://www.microchip.su/showthread.php?t=16973

Изменено пользователем Vovka

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Hedhehog    0

Vovka, к сожалению, библиотеки мистера Чена не подходят-сам их рассматривал, но руководитель сказал разрабатывать свое. Да и FAT там присутствует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Hedhehog    0

Разработка своего-не моя прихоть, условие руководства ( к сожалению ). Поэтому эти библиотеки и были отброшены. Хотя статьи чана я внимательно изучил и сделал все четко по ним с учетом даташита на SD. Может недоучел что :yes:?

Изменено пользователем Hedhehog

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vovka    23

Дал ссылку на страничку обсужения - не помогло

Дал ссылку где посмотреть - не помогло.

Третья попытка:

зайди сюда: http://jonas.haksberg.net/post/Petit-FatFs-on-a-PIC18.aspx

и скачай в конце странички zip-архив!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Hedhehog    0

Да изучил я ссылки.

Но библиотеки:

"pff.h"

(насчет следующих двух не уверен)

"GenericTypeDefs.h"

"HardwareProfile.h"

скорей всего написаны Чаном. Поэтому не могу использовать этот проект. Разве что как "отвлеченный пример"-на который можно взглянуть. Но в статье Чана все доходчиво расписано вроде бы, хотя лишний источник не помешает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vovka    23

Тебе нужны файлы diskio.* - тут без всякого фата, вот функции:

DSTATUS disk_initialize (void); - инициализация

DRESULT disk_readp (BYTE*, DWORD, WORD, WORD); - чтение сектора

DRESULT disk_writep (const BYTE*, DWORD); - запись сектора

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Hedhehog    0

Попробовал адаптировать. Компиляция без проблем, (подставил нужный порт, поменял регистр для СПИ все как положено, больше ничего так не углядел) но на выходе та же фигня причем, что удивительно, даже поразительно я бы сказал, на моих проверочных ногах которые здесь вообще не задействованы, висят те же значения. Странно как-то. И с адаптацией проблем должно было быть больше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Hedhehog    0

Я так понимаю, что в архиве лежит готовый проект под некую среду разработки для контроллеров PIC? (Программировал только в IAR и под AVR и то не сильно много :yes: )

И заработал именно этот проект, ссылку на который вы дали? ( Ну т.е. Petit FatFs )

Изменено пользователем Hedhehog

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vovka    23

Я так понимаю, что в архиве лежит готовый проект под некую среду разработки для контроллеров PIC? (Программировал только в IAR и под AVR и то не сильно много :yes: )

А если просмотреть все папки архива?

И заработал именно этот проект, ссылку на который вы дали? ( Ну т.е. Petit FatFs )

Ссылку уже в который раз давал! Ладно, вот ответ: http://www.microchip.su/showpost.php?p=210400&postcount=51

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Hedhehog    0
А если просмотреть все папки архива?

Я не сталкивался с пиковскими проектами, поэтому и поинтересовался.

А по поводу ссылки, я решил просто уточнить, правильно ли я вас понял на соседнем форуме. Т.е. именно это сообщение, на которое вы даете мне ссылку выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vovka    23

Я не сталкивался с пиковскими проектами, поэтому и поинтересовался.

В архиве есть папка sample:

в нем есть файл 00readme.txt, в котором написано:

Petit FatFs Module Sample Projects

DIRECTORIES

<generic> Generic microcontrollers with MMC

<avr> ATMEL AVR (ATtiny85) with MMC

<avr_boot> ATMEL AVR generic MMC boot loader

<pic> Microchip PIC (PIC24FJ46GA002) with MMC

<win32> Windows 2000/XP (VC++)

.....

А из папки src нужно взять два файла diskio.h и diskio.c, скопировать в свой проект и адаптировать под МК!

Все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Vovka    23

Надеюсь, что поможет. Если что - будем дальше "жевать"...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: carlogulliani
      Добрый день!
      Столкнулся с такой проблемой, пытаюсь взаимодействовать с чипом AFE4300 по SPI. В дотащите указано, что уровень сигнала 2 - 3 вольта. Подключаю к nrf51 (использует уровень 3.3 вольта), ресетю и пытаюсь прочитать дефолтное значение регистра (0x01C3), в итоге получаю 0xFFFF.
      Перепроверил на Arduino Mega 2560, где уровень сигнала 5 вольт (подключил напрямую без level shifter) и считал свои дефолтные значения. Попробовал также считать другие 4 регистра, все также отлично считалось.
      Вот теперь не пойму, в дотащите указано не верно или у меня что-то не то.
      Еще вопрос про согласовать уровней TXB0108. Пытался через нее прокинуть сигнал от nrf51 (3.3v) на afe4300. Питание А - 3.3в, каналы А к nrf51, питание Б 5в, каналы Б к afe4300, OE к 3.3в. Не завелось, даже анализатор говорит, что MOSI шлет 0xFF, вместо реальных данных. Земля везде общая.
      Правда есть оговорка, как данный уровень ко мне приехал я мог по ошибке запитать Б 3 вольтами, а А 5 вольтами. Но даташит на него говорит, что когда А > Б, это не повреждает чип, хотя А должно быть до 3.6 вольт. Еще мог OE подключить к 5 вольтам. В общем, могли ли мои неразумные операции вывести его из строя???
       
      Еще в даташите указано, что неиспользуемые каналы надо подключить либо к питанию, либо к земле. Это может влиять на то, что я сейчас получаю?
    • Автор: Atreides
      Добрый день. Мне требуется реализовать программный юарт на атмеге16. Он нужен для того, чтобы принятые по нему данные отправить на аппаратный юарт. В интернете нашел примеры кода, но понять его мне трудно. Прошу вас словами в общих чертах объяснить принцип реализации программного юарта. Буду рад примерам, которые, на ваш взгляд, являются наиболее простыми и понятными. Заранее спасибо.
    • Автор: EugenArt
      Всем доброго времени суток!
      в поиске не смог найти инфо, поэтому создал тему, не ругайте, если ошибся с веткой.
      Идея следующая, есть автомагнитола deh-3600MP c выходом Ip-bus.Хочу подружить магнитофон с мп3 плеером (есть от фм-трансмиттера, завтра куплю платку отдельного мп3). Сразу подчеркну, что хочу управление плеером (треки, теги, пауза и т.д) с головного устройства.
      предполагаю схему так:  ip-bus - avr - mp3 player.
      алгоритм avr-mp3 несложен и открыт, а вот описание протокола ip-bus нигде нет, форум витат.спб уже изучил, есть кусок кода работы авр и ip-bus, но не очень понятно, может подскажете набор команд ip-bus или что происходит по событию нажатию кнопки вперед/назад.
      Заранее благодарен.
    • Автор: Максим Окатов
       
      Товарищи, помогите пожалуйста. Данная програмулина при нажатии на кнопку входит в функцию MinU() в которой инициализирует таймер для задержки(ждем отпустит пользователь кнопку или нет) если кнопка не отпущена то уменьшаем скважность ШИМ.
      проблема в выделенной красным строчке! когда count больше 3 уменьшаем скважность, но в отладчике AVR studio, Proteus и в железе не робит.
      Перепрыгивает действие в {} так будь-то условие не выполнено...
      #define F_CPU 1000000L
      #include <avr/io.h>
      #include <avr/interrupt.h>
      #include <util/delay.h>
      unsigned char count = 0;
      unsigned char a=5,s=3,b=0;
          //===================================Насройка таймера====================
      void Timer_ini(void){
         TCCR1B = (1<<CS12)|(0<<CS11)|(0<<CS10);
         TCNT1 = 65535-976;
         TIMSK |= (1<<TOIE1);
         count = 0;
        }
          //===========================настройка шим===========================
      void PWM_ini(void){
         ASSR=0x00;
         TCCR2=0b01101110; //На выводе OC1A единица, когда OCR1A==TCNT1, восьмибитный ШИМ
         OCR2=200;
      }
      //===============
      void MinU(){
          unsigned char i=0;
          Timer_ini();
          while (!(PINB&0b00000010)){
              if(count>2){        //Если таймер считал более двух раз
                _delay_ms(100); // ждем 100 мс
                OCR2--; // Уменьшаем скважность
                i=1;        // были в плавном уменьшении
            }
            
         }
         if (i!=1) // если не были в плавном уменьшении
         {
             OCR2=OCR2-50;
             i=0;
         }
      }
              //=======================================================
      int main(void)
          {
             
              // Настраиваем порт D на выход
              DDRB = 0b00001000;
              PWM_ini();
              //Timer_ini();
              sei();
              
              
              while(1)
              {
                  b=a-s;
                  if (!(PINB&0b00000010))
                  {
                      MinU();
                  }/*
                  //if (!(PINB&0b00000100))
                  //{
                      //PlsU();
                  //}*/
              }
              return 0;
          }
          
          ISR (TIMER1_OVF_vect)
          {
              count++;
              TCNT1 = 65535-976;
                  }
       
       
       
    • Автор: Serg_Mang
      Можно ли залить в arduino прошивку, предназначенную для чистого AVR?