BooSooV 0 26 июня, 2015 Опубликовано 26 июня, 2015 (изменено) · Жалоба "но у меня выставлен формат данных 8, и вроде он должен отправлять и принимать по 8 импульсов, но на Во-первых, кто он? ОН контроллер)) ко е что прояснилось, но вопросы с чтением по падению или возрастанию в линии тактирования открыты Изменено 26 июня, 2015 пользователем IgorKossak бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба The first bit (bit 0) starts at the first falling edge of SCL after the falling edge of CS while the last bit (bit 15, bit 23,...) starts at the last falling edge of SCL just before the rising edge of CS. Вот выдержка из даташита, которая говорит тоже самое Можно как то настроить чтобы он не по возрастанию читал линию данных а по падению Биты CPOL, CPHA в настройках SPI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба Данные у вас меняются по заднему фронту SCL, фиксируются по переднему фронту. Всё нормально. Похоже и правда все норм)) от того страннее что ничего не работает)) Биты CPOL, CPHA в настройках SPI этот вопрос снят, вроде и впрямь и так все правильно работает зато вот какая странность Это нормально? я думал что мое сообщение должно идти первым а не вторым? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба Ну что? SPI2->CR1 |= SPI_CR1_CPOL; //исходное состояние SCK==1 SPI2->CR1 |= SPI_CR1_CPHA; //capture 0-->1 не судьба? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 26 июня, 2015 Опубликовано 26 июня, 2015 (изменено) · Жалоба сейчас сделаю)) посмотрим что будет Изменено 26 июня, 2015 пользователем IgorKossak бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба Похоже и правда все норм)) от того страннее что ничего не работает)) этот вопрос снят, вроде и впрямь и так все правильно работает зато вот какая странность Это нормально? я думал что мое сообщение должно идти первым а не вторым? Какой смысл вашего сообщения? Запись в датчик по адресу 0x00? При том что: Reserved - 0x00..0x0E - Do not modify. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба Какой смысл вашего сообщения? Запись в датчик по адресу 0x00? При том что: Reserved - 0x00..0x0E - Do not modify. смысл этого сообщения просто привести кубики в соответствие с даташитом, само сообщение смысла не несет, а вот это уже несет но можете подсказать как передвинуть сообщение с последних 8 тактов на первые 8, а то пока вот так while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {} GPIO_ResetBits(GPIOSPI2, GPIO_Pin_NSS2); SPI_I2S_SendData(SPI2, 0x8F); while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); Delay(1); GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2); Delay(100); Сейчас юзаю такой код, чисто отсылаю и не опрашиваю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 июня, 2015 Опубликовано 26 июня, 2015 (изменено) · Жалоба Это одна команда SPI2->DR = 0x8F? Вот что хотите делайте, но на диаграмме 16-битовый обмен: 0x008F. "Сейчас юзаю такой код, чисто отсылаю и не опрашиваю " Нельзя так делать: цикл шины датчика должен быть завершённым; впрочем так и есть - запись по адресу 0x00 числа 0x8F что запрещено. Изнасилованный HTS221 :crying: Изменено 26 июня, 2015 пользователем Obam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 26 июня, 2015 Опубликовано 26 июня, 2015 (изменено) · Жалоба Это одна команда SPI2->DR = 0x8F? Вот что хотите делайте, но на диаграмме 16-битовый обмен: 0x008F. void Init_SPI2() { SPI_InitTypeDef SPI_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); SPI_Cmd(SPI2, DISABLE); SPI_I2S_DeInit(SPI2); init_GPIO_for_SPI2(); // Настройки SPI2 SPI_InitStructure.SPI_Direction=SPI_Direction_1Line_Tx; SPI_InitStructure.SPI_DataSize=SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS=SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256; SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB; SPI_InitStructure.SPI_Mode=SPI_Mode_Master; SPI_InitStructure.SPI_CRCPolynomial=7; SPI_Init(SPI2,&SPI_InitStructure); SPI_Cmd(SPI2,ENABLE); GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2); } SPI2->CR1 |= SPI_CR1_CPOL; //исходное состояние SCK==1 SPI2->CR1 |= SPI_CR1_CPHA; //capture 0-->1 while(1) { while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {} GPIO_ResetBits(GPIOSPI2, GPIO_Pin_NSS2); //while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {} SPI_I2S_SendData(SPI2, 0x8F); while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); /* SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx); while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); uint8_t data = SPI_I2S_ReceiveData(SPI2); SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx); */ GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2); Delay(100); /* while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {} uint8_t data = SPI_I2S_ReceiveData(SPI2); */ } Вот хоть убейте, ничего больше нету Заменил отправку на SPI_I2S_SendData(SPI2, 0x8F00); теперь сдвинулось на первые 8 бит Изменено 26 июня, 2015 пользователем BooSooV Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба "Вот хоть убейте…" " SPI_InitStructure.SPI_DataSize=SPI_DataSize_16b; " Из солёного огурца пристрелить разве что… Заменил отправку на SPI_I2S_SendData(SPI2, 0x8F00); теперь сдвинулось на первые 8 бит Да ё-ж-моё!!! 8-битный интерфейс!!! Читать после 0x8F в ваших 0x8F00 чем будете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба "Вот хоть убейте…" " SPI_InitStructure.SPI_DataSize=SPI_DataSize_16b; " Из солёного огурца пристрелить разве что… Да ё-ж-моё!!! 8-битный интерфейс!!! Читать после 0x8F в ваших 0x8F00 чем будете? ну хоть на осцилографе правильную картинку увидел)) подскажите как правильно сдвинуть сообщение на первые 8 бит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба ну хоть на осцилографе правильную картинку увидел)) подскажите как правильно сдвинуть сообщение на первые 8 бит? Ни фига не правильную! А "сообщение" не двигать, а SPI 8-битный должен быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба Ни фига не правильную! А "сообщение" не двигать, а SPI 8-битный должен быть. написал SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b; теперь 8 импульсов тактирования имеем как же теперь получить ещё 8 тактов на которые должен ответить датчик? кажется что то понял во мой код на отправку и получение, пока что без датчика, просто смотрю что генерит контроллер while(1) { while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_BSY) == SET) {} GPIO_ResetBits(GPIOSPI2, GPIO_Pin_NSS2); //while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) {} SPI_I2S_SendData(SPI2, 0x8F); while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET); //Delay(2); for(uint32_t i=0; i<0x000001FF; i++); // время по подачи импульсов на ответ SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Rx); while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET); uint8_t data = SPI_I2S_ReceiveData(SPI2); //Delay(2); for(uint32_t i=0; i<0x000000FF; i++); // подолжительность импульсов на ответ SPI_BiDirectionalLineConfig(SPI2,SPI_Direction_Tx); GPIO_SetBits(GPIOSPI2, GPIO_Pin_NSS2); Delay(100); /* while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) {} uint8_t data = SPI_I2S_ReceiveData(SPI2); */ } получил Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 26 июня, 2015 Опубликовано 26 июня, 2015 (изменено) · Жалоба http://electronix.ru/forum/index.php?showt...t&p=1347675 На приём почему 16бит? Изменено 26 июня, 2015 пользователем Obam Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BooSooV 0 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба http://electronix.ru/forum/index.php?showt...t&p=1347675 На приём почему 16бит? на прием не 16, на прием он их генерит пока задержка не кончится, а надо ровно 8? больше нельзя? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться