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

Вопросы по трансиверам Si446x

Доброго дня коллеги. Волею судеб начал работать со своим первым трансивером фирмы Silicon Labs. Модель Si4460. И ничего не получается. Для начала пытаюсь связать его с МК. Запрашиваю данные по SPI но в ответ тишина. На шине просматриваются только запрос в сторону трансивера и тактирование SPI. В ответ же ничего. Пробовал разную скорость. В том числе и максимальную 10 МГц. Опрашивал разные регистры, в том числе и Fast Response Registers и другие настроечные регистры. Но везде тишина. Что я могу делать не так? Подскажите пожалуйста.

 

На любую команду, трансивер отвечает 0xFF. Однако если я отправляю запрос о готовности принять команду по SPI (0x44), то в ответ получаю 0x00. То есть трансивер не готов получать команду.

Изменено пользователем Ruslan-maniak

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


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

Нет, не использую. Чип просто подключен к МК по SPI. Вчера под вечер я наконец сумел считать данные из регистра PART_INFO (0x01). Чип выдавал пару байт 0x44,0x60. Все остальные регистры равны нулю были. Сегодня пришёл, запустил туже самую программу - чип уже не отвечает. И появился ещё вопрос наперёд: а где взять-то значения регистров для конфигурации? В даташите там как-то туманно всё это описано. Вообще документация странная на мой взгляд.

Изменено пользователем Ruslan-maniak

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


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

Да как раз из примеров Wireless Development Suite и можно позаимствовать последовательность команд для инициализации трансивера. А также получить содержимое регистров под свой проект. Кроме даташита необходимо ознакомится с Programming Guide и API Description.

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


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

А, ну вот, в API Description более-менее определены регистры. Но по сути с места я не сдвинулся. Сейчас всё обстоит следующим образом. При отправке в 0х44 я получаю в ответ один байт 0xFF а затем нули, при любой другой команде я получаю бесконечно 0xFF. И всё, других вариантов нет. Как достучаться до чипа ума не приложу (

Изменено пользователем Ruslan-maniak

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


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

Ну что, ни у кого нет ни какаих идей почему так может быть? Как вообще впринципе проверить живой ли чип?

Изменено пользователем Ruslan-maniak

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


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

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

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


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

Ну что, ни у кого нет ни какаих идей почему так может быть? Как вообще впринципе проверить живой ли чип?

дно у чипа хорошо припаяно?

как уже выше писали - SDN на gnd подключен?

питание +3.3 и не шумит? хост с SPI на таком же напряжение?

осциллом диаграммы смотрели? все вовремя тактируется? CLKspi<=10MHz?

чудес не бывает..

 

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

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

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


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

У меня на 4463 SDN просто на землю недостаточно было, подаю импульс пару мс. Хотя может и не в том дело было.

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


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

Извиняюсь что не отвечал. Накосячил я в работе с пином nSel. не отпускал его между отправкой команды и получением ответа. Сейчас всё норм. Но появилась другая проблема. Какие бы данные я не записывал в TX_FIFO, при отправке отправляется пакет с одними и теми же данными. По крайней мере на дублирующем пине TX_DATA, я всегда вижу пакет с одними и теми же данными. При этом преамбула и синхрослово формируются нормально и размер отправляемого пакета изменяется в зависимости от количества отправляемых данных. Но вот сами данные не зависят от того что я записываю в TX_FIFO. Почему так может быть?

Изменено пользователем Ruslan-maniak

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


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

В качестве примера: открытый проект с использование Si4464 - https://github.com/tkrahn/pecanpico4 (http://kt5tk.wordpress.com/2013/07/24/pecan-pico-4-serial-number-1-built-working/)

 

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


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

Вы уверены что он рабочий? В библиотеке для Si446x толком ничего не реализовано. Только поверхностные настройки. А связаного с передачей данных там вовсе ничего нет.

И ещё такой вопрос: Реально ли связать трансиверы разных производителей? Не могут ли возникнуть нестыковки? Кто-нибудь пробовал?

Изменено пользователем Ruslan-maniak

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


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

Извиняюсь что не отвечал. Накосячил я в работе с пином nSel. не отпускал его между отправкой команды и получением ответа. Сейчас всё норм. Но появилась другая проблема. Какие бы данные я не записывал в TX_FIFO, при отправке отправляется пакет с одними и теми же данными. По крайней мере на дублирующем пине TX_DATA, я всегда вижу пакет с одними и теми же данными. При этом преамбула и синхрослово формируются нормально и размер отправляемого пакета изменяется в зависимости от количества отправляемых данных. Но вот сами данные не зависят от того что я записываю в TX_FIFO. Почему так может быть?

А производится ли действительно запись данных в FIFO?

Советую поставить WDS3 и заглянуть в c:\Program Files (x86)\SiLabs\WDS3\DemoExample\ и найти там много полезного. В т.ч. драйверы и API.

 

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


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

Имею проблему с трансивером si4461. Плата с трансивером из фирменного демокита. За основу был взят проект Si446x_BidirectionalPacket из папки с примерами WDS. Микроконтроллер STM32F0. Проблема в том, что не проходит команда POWER_UP в функции Radio_Init(). При ожидании готовности CTS после отправки команды POWER_UP вылетает в таймаут:

uint8_t radio_comm_GetResp(uint8_t byteCount, uint8_t* pData)
{
uint8_t ctsVal = 0;
uint16_t errCnt = RADIO_CTS_TIMEOUT;
while (errCnt != 0)      //wait until radio IC is ready with the data
{
	radio_hal_ClearNsel();
	radio_hal_SpiWriteByte(0x44);    //read CMD buffer
	ctsVal = radio_hal_SpiReadByte();
	if (ctsVal == 0xFF)
	{
		if (byteCount)
		{
			radio_hal_SpiReadData(byteCount, pData);
		}

		radio_hal_SetNsel();
		break;
	}
	radio_hal_SetNsel();
	errCnt--;
}
if (errCnt == 0)
{
	while(1)
	{
		BSP_LED_Toggle(LED_RED);
		/* ERROR!!!!  CTS should never take this long. */
	}
}
if (ctsVal == 0xFF)
{
	ctsWentHigh = 1;
}
return ctsVal;
}

При этом команда PART_INFO выполняется без проблем (см. осциллограммы). Аппаратный сброс трансивера также выполняется. Осциллограммы прилагаю. В чем может быть дело? Буду рад любому дельному совету. Спасибо.

osc.7z

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


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

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