Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

STM32+SDIO+SDHC16Gb

Непрочитано 11.12.2015, 08:11  
Vitaliki
Частый гость
 
Регистрация: 23.10.2011
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Vitaliki на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от realid Посмотреть сообщение
Ну так по идее, если функция SD_SendStatus(&resp1) вернет SD_OK, то в resp1 будет статус. Бит READY_FOR_DATA 8-ой.
Да, я маску вчера неправильно накладывал.
Создал вторую функцию:
Код:
SDCardState SD_GetState2(void)
{
  uint32_t resp1 = 0;

  if(SD_Detect()== SD_PRESENT)
  {
    if (SD_SendStatus(&resp1) != SD_OK)
    {
      return SD_CARD_ERROR;
    }
    else
    {
      return (SDCardState)((resp1 ››8) & 0x03);
    }
  }
  else
  {
    return SD_CARD_ERROR;
  }
}
Проверка идёт нормально. Возврат: SD_CARD_READY.
Реклама:

Последний раз редактировалось Vitaliki; 11.12.2015 в 08:13.
Vitaliki вне форума  
Непрочитано 11.12.2015, 15:51  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Vitaliki маска на 1 бит а не 2
Hives вне форума  
Непрочитано 11.12.2015, 18:31  
Vitaliki
Частый гость
 
Регистрация: 23.10.2011
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Vitaliki на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от Hives Посмотреть сообщение
Vitaliki маска на 1 бит а не 2
Хорошо. Значит, вот так:
Код:
return (SDCardState)((resp1 ›› 8) & 0x01);
Можете пояснить. Я с такими конструкциями не работал раньше.
Код:
resp1 ›› 8
значит, что считываем 8-ой бит из 32, а маской
Код:
0x01
выбираем количество.
Поясните этот момент, пожалуйста.
Vitaliki вне форума  
Непрочитано 11.12.2015, 19:04  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от Vitaliki Посмотреть сообщение
Хорошо. Значит, вот так:
Код:
return (SDCardState)((resp1 ›› 8) & 0x01);
Можете пояснить. Я с такими конструкциями не работал раньше.
Код:
resp1 ›› 8
значит, что считываем 8-ой бит из 32, а маской
Код:
0x01
выбираем количество.
Поясните этот момент, пожалуйста.
Сдвиг содержимого переменной 8 раз вправо и сброс всех не нужных битов в результате сдвига маской 0x01(операция AND), чтобы остался значащий только 1 бит.
Вообще нафиг этот сдвиг ради одного бита.
if(resp1 & 0x00000100) return SD_CARD_READY или if(resp1 & (1 ‹‹ 8 )) return SD_CARD_READY, так можно сразу проверить состояние бита, 1 или 0. Без всяких сдвигов.

Последний раз редактировалось realid; 11.12.2015 в 19:09.
realid вне форума  
Непрочитано 11.12.2015, 19:22  
Vitaliki
Частый гость
 
Регистрация: 23.10.2011
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Vitaliki на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Спасибо за пояснение!
Раз 8-ой бит, тогда вот так должно быть:
Сообщение от realid Посмотреть сообщение
(resp1 & 0x00001000)
А зачем такие сдвиговые конструкции с маской? Где только они могут быть применимы? В примерах они встречаются. Просто для удобства, чтобы при большом количестве бит не рисовать длинную маску?
И вот ещё. Если рассмотреть
Код:
(resp1 ››8) & 0x03
Здесь, получается, что мы считываем бит 8 и 9, тогда?
Спасибо!
Vitaliki вне форума  
Непрочитано 11.12.2015, 21:22  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от Vitaliki Посмотреть сообщение
Спасибо за пояснение!
Раз 8-ой бит, тогда вот так должно быть:
0x00001000 это 12-тый бит. Учите матчасть

Сообщение от Vitaliki Посмотреть сообщение
А зачем такие сдвиговые конструкции с маской? Где только они могут быть применимы? В примерах они встречаются. Просто для удобства, чтобы при большом количестве бит не рисовать длинную маску?
И вот ещё. Если рассмотреть
Код:
(resp1 ››8) & 0x03
Здесь, получается, что мы считываем бит 8 и 9, тогда?
Спасибо!
Потому что, иногда надо выделить группу битов))
Например так (resp1 ›› 9) & 0x0F из ответа выделяется 4 бита статуса и по сути возвращается номер статуса.
Код:
typedef enum
{
  SD_CARD_READY                  = ((uint32_t)0x00000001),
  SD_CARD_IDENTIFICATION         = ((uint32_t)0x00000002),
  SD_CARD_STANDBY                = ((uint32_t)0x00000003),
  SD_CARD_TRANSFER               = ((uint32_t)0x00000004),
  SD_CARD_SENDING                = ((uint32_t)0x00000005),
  SD_CARD_RECEIVING              = ((uint32_t)0x00000006),
  SD_CARD_PROGRAMMING            = ((uint32_t)0x00000007),
  SD_CARD_DISCONNECTED           = ((uint32_t)0x00000008),
  SD_CARD_ERROR                  = ((uint32_t)0x000000FF)
}SDCardState;
По идее есть еще Idle State = 0.
realid вне форума  
Непрочитано 12.12.2015, 13:46  
Vitaliki
Частый гость
 
Регистрация: 23.10.2011
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Vitaliki на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от realid Посмотреть сообщение
0x00001000 это 12-тый бит. Учите матчасть
А как это считается? Я всегда думал, что 2^3 = 8. Но 0x - это 16-ый тип.

Со сдвигом теперь понятно, спасибо!
Vitaliki вне форума  
Непрочитано 12.12.2015, 14:22  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от Vitaliki Посмотреть сообщение
А как это считается? Я всегда думал, что 2^3 = 8. Но 0x - это 16-ый тип.
Жесть. 8-ой это значит "бит номер 8" и не забываем, что первый бит номер 0.
realid вне форума  
Непрочитано 12.12.2015, 17:56  
Vitaliki
Частый гость
 
Регистрация: 23.10.2011
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Vitaliki на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Сообщение от realid Посмотреть сообщение
Жесть. 8-ой это значит "бит номер 8" и не забываем, что первый бит номер 0.
Если мы рассматриваем двоичное число, тогда в этом случае:

Единица во втором бите. Значение байта = 2^2=4.
А здесь получается каждый бит сразу за 4? Я это и не могу понять.
Вы объясните, пожалуйста, как это считать.
Vitaliki вне форума  
Непрочитано 12.12.2015, 19:33  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

Vitaliki либо жирный тролль либо жертва егэ. имха.
Hives вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучаем STM32 Cortex M3 EugVor ARM 6171 20.05.2025 20:16
Подключение DS18b20 к STM32 aftaev ARM 85 22.11.2016 10:58
Драйвер (не VCP) для встроенного USB STM32 vvv998 ARM 106 08.11.2014 21:36
sdio stm32 banzayy ARM 2 16.09.2013 18:05
Проблема с ST-LINK +KEIL + STM32 LionRJ Микроконтроллеры, АЦП, память и т.д 5 06.03.2012 17:21


Часовой пояс GMT +4, время: 11:29.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.