реклама на сайте
подробности

 
 
> si4432
owl
сообщение Jan 28 2010, 13:13
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 7-08-06
Из: Смоленск
Пользователь №: 19 370



Юзаю микруху si4432 от силабса.
Вместо положеных 1 мгц с GPIO идет 32кгц. Чтение регистров показывает что микруха находится в спящем режиме. Вывести ее из этого режима командами по spi не получается. Такая штука наблюдается на 3 из 5 плат. 2 другие работают более или менее адекватно.
Что это может быть?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
proxi
сообщение Jan 28 2010, 16:08
Сообщение #2


Гуру
******

Группа: Banned
Сообщений: 2 754
Регистрация: 5-06-05
Из: Zurich
Пользователь №: 5 744



Цитата
Вместо положеных 1 мгц с GPIO идет 32кгц

там не положенно, сколько выставите 1,5,10.15.30 МГц столько и будет, только в слипе будет RC 32 в сшатдауне и этого нет... я бы рекомендовал процессору свой генератор, хотя бы RC внутренний...а потом перехват на внешний у некоторых МК вроде можно?
так код покажите, так нагляднее будет...
Go to the top of the page
 
+Quote Post
owl
сообщение Jan 28 2010, 17:12
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 7-08-06
Из: Смоленск
Пользователь №: 19 370



Цитата(proxi @ Jan 28 2010, 19:08) *
там не положенно, сколько выставите 1,5,10.15.30 МГц столько и будет, только в слипе будет RC 32 в сшатдауне и этого нет... я бы рекомендовал процессору свой генератор, хотя бы RC внутренний...а потом перехват на внешний у некоторых МК вроде можно?
так код покажите, так нагляднее будет...

Регистр 0х0А Microcontroller Output Clock - по умолчанию загружен как xx000110 - т.е. выбрана частота 1 мГц. Потом да можно выбрать любую другую. Или это не так? Хотя когда я все таки достучался до передатчика регистр 0х0А был настроен на 1 мГц.
Register 62h. Crystal Oscillator/Power-on-Reset Control - 3 старших бита считываются как 000 т.е. проц в спячке.
Register 02h. Device Status 2 младших бита 00. IDLE состояние.



Кусок инициализации:

write_reg(0x75, 0x53); //Frequency Band Select register
write_reg(0x76, 0x4B); //write 0xBB to the Nominal Carrier Frequency1 register
write_reg(0x77, 0x00); //write 0x80 to the Nominal Carrier Frequency0 register

//Configure the receive packet handler
//Disable header bytes; set variable packet length (the length of the payload is defined by the
//received packet length field of the packet); set the synch word to two bytes long
write_reg(0x33, 0x02 ); //write 0x02 to the Header Control2 register

//Disable the receive header filters
write_reg(0x32, 0x00 ); //write 0x00 to the Header Control1 register
//Set the sync word pattern to 0x2DD4
write_reg(0x36, 0x2D); //write 0x2D to the Sync Word 3 register
write_reg(0x37, 0xD4); //write 0xD4 to the Sync Word 2 register
//Enable the receive packet handler and CRC-16 (IBM) check
// write_reg(0x30, 0x85); //write 0x0D to the Data Access Control register
write_reg(0x30, 0x8D); //write 0x0D to the Data Access Control register
//объединение команд на прием и на передачу!!!!! в регистре 0x30
//Enable FIFO mode and GFSK modulation
write_reg(0x71, 0x63); //write 0x63 to the Modulation Mode Control 2 register
//set preamble detection threshold to 20bits
write_reg(0x35, 0x28); //write 0x30 to the Preamble Detection Control register
//set the GPIO's according the testcard type

#ifdef DIVR_MODE
write_reg(0x0C, 0x17); //write 0x12 to the GPIO1 Configuration(set the TX state)
write_reg(0x0B, 0x18); //write 0x12 to the GPIO0 Configuration(set the TX state)
write_reg(0x08, 0x80); //write 0x12 to the GPIO1 Configuration(set the TX state)
#else
// write_reg(0x0C, 0x12); //write 0x12 to the GPIO1 Configuration(set the TX state)
write_reg(0x0B, 0x12); //write 0x12 to the GPIO1 Configuration(set the TX state)

#endif
// write_reg(0x0D, 0x15); //write 0x15 to the GPIO2 Configuration(set the RX state)

//set the non-default Si4432 registers
//set the VCO and PLL
write_reg(0x5A, 0x7F); //write 0x7F to the VCO Current Trimming register
// write_reg(0x58, 0x80); //write 0xD7 to the ChargepumpCurrentTrimmingOverride register
write_reg(0x59, 0x40); //write 0x40 to the Divider Current Trimming register

//set the AGC
write_reg(0x6A, 0x0B); //write 0x0B to the AGC Override 2 register
//set ADC reference voltage to 0.9V
write_reg(0x68, 0x04); //write 0x04 to the Deltasigma ADC Tuning 2 register
write_reg(0x1F, 0x03); //write 0x03 to the Clock Recovery Gearshift Override register

write_reg(0x7E, 0x36);//граница очереди фифо на прием - 54 байта для прерывания

write_reg(0x34, 0x014); //write 0x09 to the Preamble Length register

//девиация на прием!!!!!!!!
// write_reg(0x72, 0x1F); //write 0x1F to the Frequency Deviation register
//Только для скорости выше 20к
// write_reg(0x70, 0x00);//write 0x01 to the Operating Function Control 1 register

/*enable receiver chain*/
write_reg(0x07, 0x05);//write 0x05 to the Operating Function Control 1 register
//Enable two interrupts:
// a) one which shows that a valid packet received: 'ipkval'
// cool.gif second shows if the packet received with incorrect CRC: 'icrcerror'
// с) фифо буфер почти полон
write_reg(0x05, 0x13); //write 0x03 to the Interrupt Enable 1 register
write_reg(0x06, 0x00); //write 0x00 to the Interrupt Enable 2 register
//read interrupt status registers to release all pending interrupts
ItStatus1 = read_reg(0x03);//read the Interrupt Status1 register
ItStatus2 = read_reg(0x04);//read the Interrupt Status2 register


Но при старте при отсутствии клоков проц до конфигурации si4432 просто не доходит.
Чтобы прочитать регистры clk на проц кинул с другой рабочей платы.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 12:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016