trable s stm32f4 a spi

Vojtěch Petrucha petrucha na volny.cz
Sobota Červenec 8 11:20:33 CEST 2017


Zdravim,
 
potreboval bych pomoci stm32f412zgt6 precist data z AD prevodniku AD7768. AD prevodnik se chova jako master, poskytuje DOUT (8*4*8) bitu (8 kanalu po 8+24 bitech), clock (bezi zda se porad) a DRDY signal, viz screenshot z osciloskopu: http://jpeg.cz/obrazek/goNq  (modra-DRDY, zluta - data, cervena - CLK)..
Cili v MCU jsem pomoci CubeMX nastavil SPI2 jako receiving only slave s hardware NSS. Motorola frame format, 8 bitu, msb first, clock polarity LOW, clock phase 2edge, CRC disabled, NSS signal type je input HW...
 
.. a chtel pouzit DMA na cteni tech dat.. to nefungovalo.. tak jsem presel na obycejne cteni, pomoci funkce HAL_SPI_Receive(&hspi2,&adcbuf1[0],32,100);    (promenna do pro data: volatile uint8_t adcbuf1[33];)
To ale nefunguje taky.. kdyz v mainu funkci pustim parkrat za sekundu tak vetsinou precte same nuly, obcas se tam objevi "nejaka" data (nikdy neni na zacatku hodnota 0x10, ktera by tam mela byt dle nastaveni ADC - je videt i na obrazku ze skopu..).
Kdyz v CubeMX nastavim format SPI na TI tak se spravne? precte prvni byte, ale ten je v promenne na prvnich 14 mistech a pak zas same nuly..
Chapal bych, ze proste cte nekdy pozdeji kdyz uz tam ta data nulova data jsou (clock bezi porad a DOUT je pak v nule), ale proc nereaguje na ten NSS..
 
Nemel nekdo prosim napad co s tim? 
 
Moje asi naivni predstava byla, ze kdyz je tam nastaveny ten rezim rec-only-slave a nss hardware, tak to proste po zavolani funkce pocka na spadovou hranu toho nss a precte pozadovany pocet byte a konec..  podobne s DMA - pockal bych na preruseni nebo transfer complete callback a zpracoval si prijata data..
 
v te funkci na prijem je:
 
 while(hspi->RxXferCount > 0U)
    {
      /* Check the RXNE flag */
      if(__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE))
      {
        /* read the received data */
        (* (uint8_t *)pData)= *(__IO uint8_t *)&hspi->Instance->DR;
        pData += sizeof(uint8_t);
        hspi->RxXferCount--;
      }
 
coz nevypada ze by se o ten nss staralo..
 
Diky
Vojta
 
p.s. s stm32 jsem temer uplny zelenac, takze asi placam blbosti..


Další informace o konferenci Hw-list