Перейти к содержанию

STM32F1 SPI & RC-522(RFID)


Валерий Киселёв

Рекомендуемые сообщения

Спасибо за информацию. Но я пробывал передавать и принимать одновременно - не вышло . Сейчас возьму новый контроллер и модуль - и попробую - вдруг причина в железе , еще вопрост если nss софтовый - его нужно инициировать через гпио? или он иницилизируеться HAL при инициализации SPI на (A4) ? 

ПС : Не флудите.

Изменено пользователем Валерий Киселёв
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

не надо одновременно, надо сперва передать команду а потом уже принять результат. Иначе как адресат поймет что делать то? У вас ошибки в протоколе дяденька

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

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

26 минут назад, Валерий Киселёв сказал:

Но я пробывал передавать и принимать одновременно

Нет, не так. Сначала надо слать команду, а уже потом делать прием. И все выводы SPI, в т.ч. NSS надо настроить через GPIO.

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

4 минуты назад, BARS_ сказал:

И все выводы SPI, в т.ч. NSS надо настроить через GPIO.

да не обязательно это, уверяю вас. Это имеет смысл только если на шине несколько адресатов. В ином случае аппаратный NSS самый лучший выбор

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

5 минут назад, BARS_ сказал:

Нет, не так. Сначала надо слать команду, а уже потом делать прием. И все выводы SPI, в т.ч. NSS надо настроить через GPIO.

Но ведь HAL уже все настроил... я слал команду на чтение  5 раз и каждый раз слушал ответ в надежде что на 2 или 3 посыле придет ответ - но все время вижу  FF FF FF ....

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

2 минуты назад, Валерий Киселёв сказал:

я слал команду на чтение  5 раз и каждый раз слушал ответ в надежде что на 2 или 3 посыле придет ответ - но все время вижу  FF FF FF

соедините напряму. выводы MOSI и MISO процессора и попробуйте то же самое еще раз командой TansmittRecieve. Если примется то что отправлено, проблема на стороне исполнителя. Я же объяснял уже

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

После замыкания MOSI и MISO Передача идет EE 00 00 00 00  принято  спасибо буду думать дальше и читать даташит на mc522

 

 

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

причин может быть по прежнему три

1. Неправильно соединены MOSI и MISO между мастером и слэйвом (есть гении которые пытаются крест накрест подключить как в UART)

2. Неверный протокол

3. Дохлый чип

рекомендую начать разборки именно в таком порядке и повнимательнее. Чудес не бывает

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

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

я тут почитал и не могу понять вторую часть ... нужны другие параметры SPI на прием? 

Цитата

Data bytes on both MOSI and MISO lines are sent with the MSB first. Data on both MOSI and MISO lines must be stable on the rising edge of the clock and can be changed on the falling edge. Data is provided by the MFRC522 on the falling clock edge and is stable during the rising clock edge.

 

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

ну судя по тексту должно быть CPOL=1, CPHA=1. А это значит что настройки фазы и полярности должны быть по умолчанию. Если ты их не менял, то все верно. Если менял, то верни на место

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

ну это как я понял. Так то я на истину не претендую. Пробуй

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

Спасибо. Все заработало - после долгого анализа решил в шутку поменять 0 и 1  в выводе сброса - все заработало . Спасибо большое . буду писать нормальную библиотеку к этому модулю с комментариями - после попробую оформить в статью.

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

15 часов назад, mail_robot сказал:

ну это как я понял. Так то я на истину не претендую. Пробуй

Уважаемый а не подскажете как правильно считать регистр несколько раз? 

void PCD_BigReadRegister(    uint8_t reg, uint8_t count, uint8_t *values)
                                    {
                                        uint8_t address = 0x80 | (address & 0x7E);
                                        uint8_t Data[1] ={address};
                                        HAL_SPI_Transmit(SPI_PORT,Data,1,1000);
                                        HAL_SPI_TransmitReceive(SPI_PORT,Data,values,count,50000);
                                    }

Правильно - отправить адрес , потом командой отправить/принять передавать тот же адрес и принимать данные  и потом принять последний байт . После  упаковать все приняты данные в массив values  - и вот тут у мня стопор не хватает грамотности . Можете подсказать?

 

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

в мануалке же все подробно расписано

(флуд кстати потерли. Товарищ зря распинался)

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

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

Спасибо но вот если мне нужно считать больше. То как правильно поступить? 

Допустим мне нужно считать буфер FIFO 64 байта  - первый идет адрес буфера  потом прием данных и одновременная отправка адреса буфера - как правильно обозначить массив состоящий из адресов чтобы он мог быть переменной длинны? если я просто считаю шину то микросхема подумает что я отправил 0 и прекратит передачу .

LvSNU8aGRqM[1].jpg

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

Сейчас отправка идет верно 

void PCD_BigReadRegister(	uint8_t reg, uint8_t count, uint8_t *values)
			{
				uint8_t address = 0x80 | (address & 0x7E);
				uint8_t Data[] ={address};
				uint8_t buf[]={0x00};
				HAL_SPI_Transmit(SPI_PORT,Data,1,1000);
				for (uint8_t i = 0;i>count;i++)
					{
						HAL_SPI_TransmitReceive(SPI_PORT,Data,buf,1,5000);
						values[i]=buf[0];
					}
				HAL_SPI_Receive(SPI_PORT ,buf,1,1000);
				values[count-1]=buf[0];
										
			}

как то так , но что то не работает.

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

Цитата

как то так , но что то не работает

так ты сперва отправляешь адрес 0, потом опять отправляешь адрес 0. В цикле то надоть ужо указатель массива адресов сдвинуть на единичку наверное

ну и потом - адрес то наверное один и тот же все время слать неправильно, надо его чутка двигать

с кодингом у тебя, браток, ваще ниалё. Качай скилл до 80-го левела

void PCD_BigReadRegister(uint8_t reg, uint8_t count, uint8_t *values)
			{
				uint8_t address = 0x80 | (reg & 0x7E);
				uint8_t buf;
				for (uint8_t i = 0;i=>count;i++)
					{
						HAL_SPI_TransmitReceive(SPI_PORT,(uint8_t*)address,(uint8_t*)buf,1,0xFF);
						if (i) values[i-1]=buf;
						address++;
					}					
			}

так попробуй

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

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

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

55 минут назад, mail_robot сказал:

надо его чутка двигать

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

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...