Форум
 

Вернуться   Форум "Фрикер Клуб" - кодграббер своими руками > Основной раздел > Песочница

Важная информация

Ответ
 
Опции темы Опции просмотра
Старый 09.09.2019, 23:45   #141
Бурый Меню Пользователя
Резидент клуба
 
Аватар для Бурый
 
Регистрация: 05.01.2014
Сообщений: 465
По умолчанию Re: модуль si4463

Цитата:
Сообщение от genady34
я по прежнему вижу только "HAL_SPI_Transmit(&hspi1,(uint8_t *)&data,1,100);"
повторюсь-а где Вы читаете регистр???
где у Вас HAL_SPI_Receive(.......
или HAL_SPI_TransmitReceive(.......

если Вы хотите получить это тут-> while(GetResponse(10,data)==0);
то что внутри??


попробуйте что ли так...
Код:
send_str_uart1(" READ: \r\n");
 
 
HAL_GPIO_WritePin(GPIOA, NSEL_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1,(uint8_t *)&data,1,100);
HAL_SPI_Receive(&hspi1,(uint8_t *)array,n,100);

 sprintf(tx_buffer , "%2X,%2X... " ,array[0]....); 
 send_str_uart1(tx_buffer);

 
 send_str_uart1(" END\r\n");

Код:
#define POWER_UP	0x02
#define PART_INFO	0x01
#define CTS	0x44
Это то что в маин
Код:
	HAL_GPIO_WritePin(GPIOA, SDN_Pin, GPIO_PIN_RESET);
	delay_us(3000);

	HAL_GPIO_WritePin(GPIOA, NSS_Pin, GPIO_PIN_RESET);
	wait_CTS();
	SI4463_POWER_UP();
	wait_CTS();
	Send_8bit_Si4463(POWER_UP);
	while(GetResponse(7,(unsigned char*)power_up)==0);
	
	wait_CTS();
	Send_8bit_Si4463(PART_INFO);
	while(GetResponse(10,(unsigned char*)part_info)==0);
Код:
void Send_8bit_Si4463(unsigned char ch)
{
	HAL_GPIO_WritePin(GPIOA, NSS_Pin, GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi1,(uint8_t *)&ch,1,10000);
	HAL_GPIO_WritePin(GPIOA, NSS_Pin, GPIO_PIN_SET);
}

void SI4463_Write_Data(unsigned char data)
{
	//HAL_GPIO_WritePin(GPIOA, NSS_Pin, GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi1,(uint8_t *)&data,1,1000);
}

char wait_CTS(void)
{
	unsigned char cmd=0x44;
	unsigned char data_cts=0;
	while(data_cts!=0xFF)
	{
		HAL_GPIO_WritePin(GPIOA, NSS_Pin, GPIO_PIN_RESET);
		HAL_SPI_Transmit(&hspi1,(uint8_t *)&cmd,1,10000);
		HAL_SPI_Receive(&hspi1,(unsigned char *)&data_cts,1,10000);
		HAL_GPIO_WritePin(GPIOA, NSS_Pin, GPIO_PIN_SET);
	}
	if(data_cts==0xFF)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

int GetResponse(char n, unsigned char *pbRespData)
{
	unsigned char cmd=0x44;
	unsigned char data_cts=0;
	while(data_cts!=0xFF)
	{
		HAL_GPIO_WritePin(GPIOA, NSS_Pin, GPIO_PIN_RESET);
		HAL_SPI_Transmit(&hspi1,(unsigned char *)&cmd,1,10000);
		HAL_SPI_Receive(&hspi1,(unsigned char *)&data_cts,1,10000);
		if(data_cts!=0xFF)
			{
				HAL_GPIO_WritePin(GPIOA, NSS_Pin, GPIO_PIN_SET); 
				return 0;
			}
	}
	HAL_SPI_Receive(&hspi1,(unsigned char *)&pbRespData,n,10000);
	HAL_GPIO_WritePin(GPIOA, NSS_Pin, GPIO_PIN_SET);
	return 1;	
}

void SI4463_POWER_UP(void)
   {  
      //RF_POWER_UP 0x02, 0x01, 0x00, 0x01, 0xC9, 0xC3, 0x80      
      HAL_GPIO_WritePin(GPIOA, NSS_Pin, GPIO_PIN_RESET);
      SI4463_Write_Data(0x02);//
      SI4463_Write_Data(0x01);//0-Boot normally; 1-Transceiver;
      SI4463_Write_Data(0x00);
      SI4463_Write_Data(0x01);//XO_FREQ[31:0] - 30MHz
      SI4463_Write_Data(0xC9);//XO_FREQ[31:0] - 30MHz
      SI4463_Write_Data(0xC3);//XO_FREQ[31:0] - 30MHz
      SI4463_Write_Data(0x80);//XO_FREQ[31:0] - 30MHz      
      HAL_GPIO_WritePin(GPIOA, NSS_Pin, GPIO_PIN_SET);
   }
Вложения
Тип файла: zip si4463_logic.zip (2.6 Кб, 4 просмотров)
__________________
Планировалось сделать "устройство"...и снова получились часы. Бой курантов тревожит двор)

Последний раз редактировалось Бурый; 09.09.2019 в 23:47.
Бурый вне форума   Ответить с цитированием
Старый 16.09.2019, 22:12   #142
EPA Меню Пользователя
Супер Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 1,337
По умолчанию Re: модуль si4463

Цитата:
Сообщение от Бурый
Такс, пацанрэ! Попал в "просак", пытаюсь завести Si4463, но не выходит, при этом чтение к примеру PATR_INFO (0x01) читает реальные данные, читаю другие регистры, везде по нулям, пытаюсь записать в регистр 0x13 (GPIO_CFG), читаю и там нули...
Запись происходит так:

unsigned char array[10]={0x13...};

NSEL_OFF();
HAL_SPI_Transmit(&hspi1,(unsigned char *)array,n,1000);
HSEL_ON();
while(wait_CTS!=1);

я ХЗ,. но, предположу NSEL_OFF();- это разрешение на запись в камень 4463.
потом по SPI отправляем команды или конфиг.
а дальше закрываем разрешение на запись через HSEL_ON();
А дальше любой код уже не будет считывать 4463, он становиться глухонемой.
вот структура записи команд или конфига:

PHP код:
void si_SendCmdNoResp(voiddatauint8_t len)
{
        if (
statusSi4463_SPIcommand!=Si4463_OK)
        {
            return;
        }
        if(
si_waitForCTS()) // Make sure it's ok to send a command
        
{
            
spi_ClearNsel();
            for(
uint8_t i=0;i<len;i++)
            {
                
spi_WriteByte(((uint8_t*)data)[i]); // (pgm_read_byte(&((uint8_t*)data)[i]));
            
}
            
spi_SetNsel();            
        }
    


где :
PHP код:
void spi_Init(void); //  Max SPI clock of Si446x is 10MHz
void spi_ClearNsel(void);//  SPI SS activate.
void spi_SetNsel(void); //SPI SS deactivate.
void spi_WriteByte(uint8_t data); // оправить байт
uint8_t spi_ReadByte(uint8_t data);// прочитать байт
void si_AssertShutdown(void);// SDN при LOW трансивер переходит в режим амнезии, он забывает все настройки
void si_DeassertShutdown(void);//SDN при Higt трансивер просыпается
//void si_ClearCTS();// Clears the CTS state variable.
void si_Reset(void);//eset si446x
uint8_t si_waitForCTS();// ожидаем CTS по SPI или по GPIO
void si_SendCmdNoResp(void*, uint8_t);//послать команду на si446x
void si_StartTX(uint8_t);// start TX быстрый
//static void si_SetState(siState);// Установить новый режим si
//static void si_SetProperties(uint16_t , void* , uint8_t );//Загрузить свойства
//static inline void si_SetProperty(uint16_t, uint8_t);// Загрузить одно свойство
//static void si_ClearFIFO(void);// очистить FIFO
static uint8_t si_GetFRR(uint8_t);//Read a FRR
static siState si_GetState(void);//узнать состояние ( режим) трансивера
//uint8_t si_TX_FIFO(void*, uint8_t, uint8_t, siState);//
void si_RX(uint8_t channel=0);//
//void si_SetTxPower(uint8_t);//
template<typename Tsize_t nsize_t si_configSize(const (&arr)[n]);
template<typename Tsize_t n> static void si_LoadArrayConfig(const (&_config)[n]);
template<typename Tsize_t nvoid SI_LOAD_CONFIG(const (&_config)[n]); 
А дальше разбираем структуру по полочкам:
сначало проверяем наш 4463 на то,готов ли он считывать команды извне с помощью:
Код:
uint8_t si_waitForCTS()
.
если готов, то даем команду spi_ClearNsel(); т.е. твой NSEL_OFF. это мы разрешили работать SPI c 4463.
Дальше уже загружаем наши байты через SPI в 4463.
Как закончили грузить байты в 4463, то обязательно закрываем доступ через команду spi_SetNsel(); - типа NSEL_ON.
Вот и весь алгоритм.
Вот так выглядит uint8_t si_waitForCTS()
PHP код:
const uint8_t RADIO_USER_CFG_USE_GPIO1_FOR_CTS=1// на GPIO1 - проверка CTS
volatile static const unsigned long  MAX_CTS_RETRY=60000;
uint8_t si_waitForCTS(); // 
{
    
    
uint8_t ctsValue 0;
    
uint16_t errCnt 0;
    
    if (
RADIO_USER_CFG_USE_GPIO1_FOR_CTS// если вывод siGPIO настроен на CTS
    
{
    
        
CTS_PORT |=(1<<CTS); // внутренняя подтяжка
        
CTS_PORT&=~(1<<CTS); // порт на вход
        
        
while(!(CTS_PIN_PORT & (1<<CTS)))
        {
            
/* Wait...*/
            
if (++errCnt MAX_CTS_RETRY// мля если с 60000 попытки не получ, то 4463 в нирване. для это ниже строка тобы дебажить
            
{
            
statusSi4463_SPIcommand=Si4463_ERROR_CTS// DEBUG
            
return 0;  // не дождались  wrong CTS
            
}
            
DELAY_US(10);
        }
        return 
1;
    }     
    
    
// если вывод siGPIO не настроен на CTS, опрашиваем через SPI, мля, это долго
        
do {
        
                
spi_ClearNsel();
                
// Send command
                
spi_WriteByte(SI446X_CMD_READ_CMD_BUFF); //#define SI446X_CMD_READ_CMD_BUFF        0x44
                // Get CTS value
                
ctsValue = (spi_ReadByte(0xFF) == 0xFF);
                
spi_SetNsel();
                if (++
errCnt MAX_CTS_RETRY// 
                
{
                    
statusSi4463_SPIcommand=Si4463_ERROR_CTS// DEBUG
                
                    
return 0;  // не дождались  wrong CTS
                
}
                
DELAY_US(10);
            }    while (!
ctsValue);
    
        
statusSi4463_SPIcommand=Si4463_OK// 
        
return 1;    
    

Данная функция универсальна, ибо есть разные схемы подключения.

если до конца прочитал то поймешь где ошибка у тебя в коде.

Последний раз редактировалось EPA; 16.09.2019 в 22:48.
EPA вне форума   Ответить с цитированием
Старый 18.09.2019, 19:37   #143
Бурый Меню Пользователя
Резидент клуба
 
Аватар для Бурый
 
Регистрация: 05.01.2014
Сообщений: 465
По умолчанию Re: модуль si4463

Подскажите мыслью, может ли трансивер принимать Манчестер, описание почитал и понимаю что там преамбула от 1-255бит, а потом до 4 байт и crc, в моем случае надо принять 6 бит и в самой посылке crc отсутствует. Как быть? В сыром режиме принимать?
__________________
Планировалось сделать "устройство"...и снова получились часы. Бой курантов тревожит двор)
Бурый вне форума   Ответить с цитированием
Старый 19.09.2019, 21:06   #144
EPA Меню Пользователя
Супер Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 1,337
По умолчанию Re: модуль si4463

Скажем так! В начале всегда лучше принимать в сыром режиме. Мои же исходники валяются на форуме: там типа si4463 принимает, а программа для ПК не только принимает, а рисует осцилограмму. СМОТРИ. Если правильно принимает 4463, то код приёма вообще в лёгкую. У меня даже есть кодинг озвученной тобою хайлилайки фигни )) )))) примерная цена той фигни-банка балтики9. :-)

Добавлено через 30 минут
Друзья, сорри. Меня долго не было на форуме. Делишки.

Последний раз редактировалось EPA; 19.09.2019 в 21:03.
EPA вне форума   Ответить с цитированием
Старый 19.09.2019, 21:07   #145
genady34 Меню Пользователя
Автор
 
Регистрация: 03.05.2015
Сообщений: 102
По умолчанию Re: модуль si4463

лучше в сыром виде. ибо намучаешься.. потеряешь кучу времени.
и все равно в сыром режиме. очевидней для работы.
мое лично никому не нужное мнение
genady34 вне форума   Ответить с цитированием
Старый 19.09.2019, 21:19   #146
EPA Меню Пользователя
Супер Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 1,337
По умолчанию Re: модуль si4463

Ситуации разные бывают, ув. коллега,
Если работать только с одним форматом пакета-однозначно лучше, чтоб камень 4463 сам обрабатывал сигнал, не нагружая управляющий контроллер. Он, сцука 4463, для этого и разработан инженерами Силабса. Видите ли! ХЗ, какие задачи у MCU должны решаться параллельно.

Добавлено через 5 веков
ВРЕМЯ: 255*~300us+полезный сигнал+контролька=1дох( туева хуча времени=1 до х уя (дох) долго )

Последний раз редактировалось EPA; 19.09.2019 в 21:45.
EPA вне форума   Ответить с цитированием
Старый 19.09.2019, 21:53   #147
genady34 Меню Пользователя
Автор
 
Регистрация: 03.05.2015
Сообщений: 102
По умолчанию Re: модуль si4463

тут можно долго дискутировать конечно, коллега,
но сразу понимаем что...
1. пока не получим данные мы их не имеем, ибо ничем не заняты в принципе..
2. если есть определенные задачи, например не нужно весь пакет.. то зачем нам его ждать?
и. т. д...
genady34 вне форума   Ответить с цитированием
Старый 19.09.2019, 22:13   #148
EPA Меню Пользователя
Супер Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 1,337
По умолчанию Re: модуль si4463

За 255 импульсов преамбулы мона извне определить сам выброс пакета, настроиться на приём, принять вплоть до бита, паралельно глуша приемную базовою станцию. Т.е. имеем сигнал, имеем частоту, дальше подстраиваясь имеем контроль над ситуевиной!!!! В конце мля концов Имеем например штатку тазика кодподменой.

Последний раз редактировалось EPA; 19.09.2019 в 22:27.
EPA вне форума   Ответить с цитированием
Старый 19.09.2019, 22:26   #149
genady34 Меню Пользователя
Автор
 
Регистрация: 03.05.2015
Сообщений: 102
По умолчанию Re: модуль si4463

на сколько мне известно, у большинства чипов преамб устанавливается в конфиге,
а значит максимум когда Вы о ней узнаете это прерывание по приему преамб.
далее идет ИД.. это след прерывание и так далее.
как Вы можете в пакетном режиме осуществить вышесказанное Вами?
genady34 вне форума   Ответить с цитированием
Старый 19.09.2019, 22:35   #150
EPA Меню Пользователя
Супер Модератор
 
Аватар для EPA
 
Регистрация: 01.11.2016
Сообщений: 1,337
По умолчанию Re: модуль si4463

В пакетном режиме однозначный ответ - никак.

Добавлено через 2 минуты
Но!но!но! ....всё зависит от поставленной задачи.

Добавлено через 3 минуты
Какой алгоритм у немецкого девайса?

Последний раз редактировалось EPA; 19.09.2019 в 22:44.
EPA вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

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

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



Текущее время: 06:23. Часовой пояс GMT +3.


vBulletin 4.1.0 Перевод: zCarot
(C) www.phreakerclub.com
Яндекс.Метрика