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

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

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

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

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

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


 
Опции темы
Непрочитано 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.RU
 
Регистрация: 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,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 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,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 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,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 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.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: STM32+SDIO+SDHC16Gb

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

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучаем STM32 Cortex M3 EugVor ARM 6166 19.02.2024 18:22
Подключение 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, время: 15:28.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot