Jump to content

    
Sign in to follow this  
Ruslan-maniak

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

Recommended Posts

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

 

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

Edited by Ruslan-maniak

Share this post


Link to post
Share on other sites

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

Edited by Ruslan-maniak

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Edited by Ruslan-maniak

Share this post


Link to post
Share on other sites

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

Edited by Ruslan-maniak

Share this post


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

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

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

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

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

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

 

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

Edited by Jury093

Share this post


Link to post
Share on other sites

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

Edited by Ruslan-maniak

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

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

Edited by Ruslan-maniak

Share this post


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

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

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

 

Share this post


Link to post
Share on other sites

Имею проблему с трансивером 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this