Nastaveie polarity CLK pre EEPROM (SPI)
Moderátori: psichac, Moderátori
-
- Ultimate člen
- Príspevky: 4418
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Nastaveie polarity CLK pre EEPROM (SPI)
Ahojte,
Prosim o pomoc.
Uz pol hodiny cumim do katalogu a ani za svet tam nevidim kde sa nastavuje CLK polarita SPI. Bud to tam je a ja to nevidim, alebo to tam nie je a je to zly katalog.
Na strane 12 sekcia 4.1 sa pise toto: Ja potrebujem nastavit tento mod, CPOL = 0, CPHA = 0, len akosi neviem najst kde sa to nastavuje. Ze by sa to nenastavovalo a akceptuje to oboje? Ale potom naco tam dali tie bity CPOL a CPHA?
Mozete sa prosim na to pozriet?
Link na web
https://www.farnell.com/datasheets/2914061.pdf
Dakujem.
Prosim o pomoc.
Uz pol hodiny cumim do katalogu a ani za svet tam nevidim kde sa nastavuje CLK polarita SPI. Bud to tam je a ja to nevidim, alebo to tam nie je a je to zly katalog.
Na strane 12 sekcia 4.1 sa pise toto: Ja potrebujem nastavit tento mod, CPOL = 0, CPHA = 0, len akosi neviem najst kde sa to nastavuje. Ze by sa to nenastavovalo a akceptuje to oboje? Ale potom naco tam dali tie bity CPOL a CPHA?
Mozete sa prosim na to pozriet?
Link na web
https://www.farnell.com/datasheets/2914061.pdf
Dakujem.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
-
- Ultimate člen
- Príspevky: 2581
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Nastaveie polarity CLK pre EEPROM (SPI)
Tá pamäť je SPI slave? Tento režim sa nastavuje na masteri. Ak nesedí toto nastavenie, je to dôvod aby vôbec nefungovala komunikácia po zbernici.
0
- daqq
- Power user
- Príspevky: 2528
- Dátum registrácie: 10 Jún 2008, 00:00
- Bydlisko: Bratislava
- Vek: 36
- Kontaktovať používateľa:
Re: Nastaveie polarity CLK pre EEPROM (SPI)
Nikde sa to nenastavuje na pamati. Datasheet hovori, ze vie fungovat pri takychto nastaveniach MASTER zariadenia.
0
Outsource your thinking: Get religious!
Zistenie: Ked robite sucasne v C, C++, C#, Matlabe, trocha pokukujete po VHDL, sialenstvo nemoze byt daleko...este stastie, ze som lietadlo a nemam tieto problemy.
Zistenie: Ked robite sucasne v C, C++, C#, Matlabe, trocha pokukujete po VHDL, sialenstvo nemoze byt daleko...este stastie, ze som lietadlo a nemam tieto problemy.
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Nastaveie polarity CLK pre EEPROM (SPI)
Ono je to v podstate jedno. Podstatné je že vstupné data a aj výstupné sú stabilné pri nábežnej hrane. Tie dva módy tam dostali tak že rozlišujú z akej východiskovej úrovne dát to začína či z nuly alebo jednotky. Ale ako vidno z tých grafov je to fuk. Data sa musia meniť pri dobežnej hrane.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Ultimate člen
- Príspevky: 4418
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Nastaveie polarity CLK pre EEPROM (SPI)
Ja mam na zbernici tri zariadenia toto som nechapal ako myslia, ale aj mne sa zdalo ze podporuje oba rezimy, len neviem preco tam pisu o tych dvoch registroch CPOL = 0, CPHA = 0, ked sa to nikde neda nastavit. Mali tam len napisat z to podporuje obe a neplist me s tym CPOL = 0, CPHA = 0.
Dalsi podporuje ked je CLK v standby v nule a treti sa da lubovolne nakonfiurovat. Tam tiez zvolim nulu.
Tak to vyskusam ci to pojde a dam vediet.
Dalsi podporuje ked je CLK v standby v nule a treti sa da lubovolne nakonfiurovat. Tam tiez zvolim nulu.
Tak to vyskusam ci to pojde a dam vediet.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
-
- Ultimate člen
- Príspevky: 4418
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Nastaveie polarity CLK pre EEPROM (SPI)
Musim si lepsie otvorit oci...
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
-
- Ultimate člen
- Príspevky: 4418
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Nastaveie polarity CLK pre EEPROM (SPI)
Mam este jednu otazku ohladom SPI v C.
Pouzivam MCC konfigurator, co velmi ulahci nastavenie MCU periferii teaz konktetne PIC18F46K40. No niekedy MCC vygeneruje kod ktoremu vobec nerozumiem. Pre SPI MCC vygeneroval spi1.h a spi1.c.
spi1.h
a spi1.c subor
Co mi nie je jasne v spi1.c je to ze MCC konfigurator v inicializacii v poslednom riadku nastavil SSP1CON1bits.SSPEN = 0;, co je SPI disable. Takze ja mam najprv zavolat funkciu SPI1_Open() a potom napr. SPI1_ExchangeByte() a nakoniec SPI1_Close(). Takto by to malo byt spravne? Alebo to nemusi byt takto?
Ja som nevedel ako zavolat funkciu bool SPI1_Open(spi1_modes_t spi1UniqueConfiguration), lebo neviem co je to "spi1UniqueConfiguration" a dokonca aky je to typ premennej "spi1_modes_t". Vracia to bool.
Tak som to docasne oblbol tak, ze som v inicializacii v poslednom riadku prepisal 0 na 1 a po inicializacii rovno zavolal funkciu SPI1_ExchangeByte(126) -> cislo 01111110 a funguje to.
Mna len zaujima ze preco to MCC spravil tak komplikovane. Aky vyznam ma ta funkcia SPI1_Open a ako sa spravne vola lebo nie je tam void, takze neaky vstup asi vyzaduje a neviem co tam dosadit.
Dakujem vopred za pomoc.
Pouzivam MCC konfigurator, co velmi ulahci nastavenie MCU periferii teaz konktetne PIC18F46K40. No niekedy MCC vygeneruje kod ktoremu vobec nerozumiem. Pre SPI MCC vygeneroval spi1.h a spi1.c.
spi1.h
Kód: Vybrať všetko
#ifndef SPI1_H
#define SPI1_H
/**
Section: Included Files
*/
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
/* SPI interfaces */
typedef enum {
SPI1_DEFAULT
} spi1_modes_t;
void SPI1_Initialize(void);
bool SPI1_Open(spi1_modes_t spi1UniqueConfiguration);
void SPI1_Close(void);
uint8_t SPI1_ExchangeByte(uint8_t data);
void SPI1_ExchangeBlock(void *block, size_t blockSize);
void SPI1_WriteBlock(void *block, size_t blockSize);
void SPI1_ReadBlock(void *block, size_t blockSize);
void SPI1_WriteByte(uint8_t byte);
uint8_t SPI1_ReadByte(void);
#endif //SPI1_H
Kód: Vybrať všetko
#include "spi1.h"
#include <xc.h>
typedef struct {
uint8_t con1;
uint8_t stat;
uint8_t add;
uint8_t operation;
} spi1_configuration_t;
//con1 == SSPxCON1, stat == SSPxSTAT, add == SSPxADD, operation == Master/Slave
static const spi1_configuration_t spi1_configuration[] = {
{ 0x0, 0x40, 0x1, 0 }
};
void SPI1_Initialize(void)
{
//Setup PPS Pins
SSP1CLKPPS = 18;
SSP1DATPPS = 17;
RC2PPS = 15;
RC0PPS = 16;
//SPI setup
SSP1STAT = 0x40;
SSP1CON1 = 0x00;
SSP1ADD = 0x01;
TRISCbits.TRISC2 = 0;
SSP1CON1bits.SSPEN = 0; // serial port ON/OFF (SPI -> ON/OFF) - moj komentar
}
bool SPI1_Open(spi1_modes_t spi1UniqueConfiguration)
{
if(!SSP1CON1bits.SSPEN)
{
SSP1STAT = spi1_configuration[spi1UniqueConfiguration].stat;
SSP1CON1 = spi1_configuration[spi1UniqueConfiguration].con1;
SSP1CON2 = 0x00;
SSP1ADD = spi1_configuration[spi1UniqueConfiguration].add;
TRISCbits.TRISC2 = spi1_configuration[spi1UniqueConfiguration].operation;
SSP1CON1bits.SSPEN = 1;
return true;
}
return false;
}
void SPI1_Close(void)
{
SSP1CON1bits.SSPEN = 0;
}
uint8_t SPI1_ExchangeByte(uint8_t data)
{
SSP1BUF = data;
while(!PIR3bits.SSP1IF);
PIR3bits.SSP1IF = 0;
return SSP1BUF;
}
void SPI1_ExchangeBlock(void *block, size_t blockSize)
{
uint8_t *data = block;
while(blockSize--)
{
SSP1BUF = *data;
while(!PIR3bits.SSP1IF);
PIR3bits.SSP1IF = 0;
*data++ = SSP1BUF;
}
}
// Half Duplex SPI Functions
void SPI1_WriteBlock(void *block, size_t blockSize)
{
uint8_t *data = block;
while(blockSize--)
{
SPI1_ExchangeByte(*data++);
}
}
void SPI1_ReadBlock(void *block, size_t blockSize)
{
uint8_t *data = block;
while(blockSize--)
{
*data++ = SPI1_ExchangeByte(0);
}
}
void SPI1_WriteByte(uint8_t byte)
{
SSP1BUF = byte;
}
uint8_t SPI1_ReadByte(void)
{
return SSP1BUF;
}
Ja som nevedel ako zavolat funkciu bool SPI1_Open(spi1_modes_t spi1UniqueConfiguration), lebo neviem co je to "spi1UniqueConfiguration" a dokonca aky je to typ premennej "spi1_modes_t". Vracia to bool.
Tak som to docasne oblbol tak, ze som v inicializacii v poslednom riadku prepisal 0 na 1 a po inicializacii rovno zavolal funkciu SPI1_ExchangeByte(126) -> cislo 01111110 a funguje to.
Mna len zaujima ze preco to MCC spravil tak komplikovane. Aky vyznam ma ta funkcia SPI1_Open a ako sa spravne vola lebo nie je tam void, takze neaky vstup asi vyzaduje a neviem co tam dosadit.
Dakujem vopred za pomoc.
0
Naposledy upravil/-a romiadam v 07 Jún 2022, 08:03, upravené celkom 1 krát.
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
-
- Ultimate člen
- Príspevky: 2581
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Nastaveie polarity CLK pre EEPROM (SPI)
Nuž ja mám zrejme so SPI viac skúseností, mne ten text nepríde zmätočný. Jasne tam píšu, že sa jedná o nastavenie mikrokontroléra.
Zo zvedavosti, aký IO tam máte, že podporuje konfiguráciu SPI mode? Môžete poslať typ obvodu?
0
-
- Ultimate člen
- Príspevky: 4418
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Nastaveie polarity CLK pre EEPROM (SPI)
MCU je PIC18F46K40. Pamat je M95M04-DR.
Aha, takze to je tam pre nastavenie MCU? A ja som to pochopil ze to je pre nastavenie pamate, ze si ten mod mozem vybrat ktory mi vyhovuje a ze nikde sa to ma v pamati nakonfigurovat. Tak potom to te jasne.
Aha, takze to je tam pre nastavenie MCU? A ja som to pochopil ze to je pre nastavenie pamate, ze si ten mod mozem vybrat ktory mi vyhovuje a ze nikde sa to ma v pamati nakonfigurovat. Tak potom to te jasne.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
Re: Nastaveie polarity CLK pre EEPROM (SPI)
ahoj, chapem ze je to SPI v C ale, ak si clovek spatne pozrie v dissemblingu co tieto programy /MCC/ dokazu generovat... Vzdy pri prvom pokuse pisem binar nakolko sa to jednoduchsie porovnava s manualom k mikrokontorleru, nastavenie SPI:
Zapis:
Citanie:
Je to len prvotna skuska displeja na SPI a citanie z eeprom na SPI nic nieje osetrene ani dalsie pouzitie pinov mikrokontrolera atd. Ak chcem vediet viac co sa mi odohrava na zbernici pripadne menim nastavenia tak pouzivam osciloskop sice ma aj analyzer ale na zobrazenie prebehov postacuje aj dvojkanalovy osciloskop. Len som chcel ukazat ze sa nejedna o nic zlozitea clovek vie co sa mu tam odohrava . Nastavenie SPI je pre Xmegu. Mozno to niekomu pomoze.
Kód: Vybrať všetko
CLR REG1
LDI REG1,0B10111100
STS DIR_C,REG1
LDI REG1,0B01010000
STS CTRL_SPI,REG1
LDI REG1,0B00000001
STS INTCTRL_SPI,REG1
LDI REG1,0B00000000
STS CTRLB_SPI,REG1
LDI REG1,0B00011100
STS OUT_C,REG1
CLR REG1
Kód: Vybrať všetko
CLR REG1
LDI REG1,0B00000000
STS OUT_C,REG1
LDI REG1,0XA0
STS DATA_SPI,REG1
OK1:
CLR REG5
LDS REG5,STATUS_SPI
SBRS REG5,7
RJMP OK1
CLR REG5
LDI REG1,0B00011000
STS OUT_C,REG1
CLR REG1
Kód: Vybrať všetko
CLR REG2
CLR REG1
LDI REG1,0B00000000
STS OUT_C,REG1
LDI REG1,0X00
STS DATA_SPI,REG1
CLR REG1
LDS REG1,DATA_SPI
MOV REG2,REG1
CLR REG1
CALL SPI_LCD_HOLD
LDI REG1,0B00000000
STS OUT_C,REG1
CLR REG1
- Prílohy
-
- SPI_LCD.TIF
- (301.69 KiB) Zatiaľ žiadne stiahnutie
0
Nuclear battery for electric cars !!!
-
- Ultimate člen
- Príspevky: 4418
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Nastaveie polarity CLK pre EEPROM (SPI)
Miko6005,
ten tvoj prispevok som nepochopil.
Otazka bola preco v inicializacii sa deaktivuje SPI port a potom v SPI1_Open() sa aktivuje (povoli) a v SPI1_Close() sa zase deaktivuje.
A na co sluzi a ako sa vola ta funkcia SPI1_Open() a SPI1_Close() co vygenerovl MCC. Preco je to tak spravene.
ten tvoj prispevok som nepochopil.
Otazka bola preco v inicializacii sa deaktivuje SPI port a potom v SPI1_Open() sa aktivuje (povoli) a v SPI1_Close() sa zase deaktivuje.
A na co sluzi a ako sa vola ta funkcia SPI1_Open() a SPI1_Close() co vygenerovl MCC. Preco je to tak spravene.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
Re: Nastaveie polarity CLK pre EEPROM (SPI)
S PICama nedělám, ale myslím si, že SPI1_Open a SPI1_Close() aktivuje vybranou konfiguraci (to je ten parametr volání) nebo deaktivuje HW SPI interface. Vzhledem k tomu, že spi1_modes_t (viz. dále) je tam jen jeden, tak můžeš na začátku zavolat SPI1_Open a pak ho jenom používat. SPI1_Close() nemusíš používat vůbec (tedy pokud nebudeš používat bootloader, přepnutí do něj apod.). Prostě zapneš zařízení, to otevře SPI interface a tím to vadne.romiadam - (ze SZ) napísal:Preco tam MCC dal SPI1_Open a SPI1_Close(). TO sa ma stale SPI aktivovat a deaktivovat?
A ako presne sa vola ta funkcia SPI1_Open? Nie j tam void, takze asi vyzaduje neake premenne, lenze co je toto (spi1_modes_t spi1UniqueConfiguration)?
Pokud používáš více SPI zařízení na jednom SPI portu, pak se příjem dat na jednotlivých periferiích aktivují signálem !SS (Slave Select - aktivní v nule) - ovšem za předpokladu, že jej všechny periferie mají. Pak každá periferie používá společné signály MOSI, MISO, CLK a svůj vlastní !SS.
MOSI = Master Out Slave In
MISO = Master In Slave Out
Co je bool SPI1_Open(spi1_modes_t spi1UniqueConfiguration) :
bool => funkce SPI1_Open vrací hodnotu TRUE nebo FALSE.
spi1UniqueConfiguration => název proměnné, do které se uloží hodnota parametru, se kterou funkci SPI1_Open voláš. Proměnná je typu spi1_modes_t.
Kód: Vybrať všetko
/* SPI interfaces */
typedef enum {
SPI1_DEFAULT
} spi1_modes_t;
Osobně bych typ definoval takto :
Kód: Vybrať všetko
/* SPI interfaces */
typedef enum SpiModesEnum
{
SPI1_DEFAULT
} SpiModesEnum;
Posuď sám : SpiModesEnum vs. spi1_modes_t.
0
-
- Ultimate člen
- Príspevky: 4418
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Nastaveie polarity CLK pre EEPROM (SPI)
Dakujem velmi pekne za vystizny vyklad.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 5 Odpovedí
- 777 Zobrazení
-
Posledný príspevok od používateľa romiadam
-
- 94 Odpovedí
- 10561 Zobrazení
-
Posledný príspevok od používateľa 03601
-
- 14 Odpovedí
- 4909 Zobrazení
-
Posledný príspevok od používateľa Mishung
-
- 2 Odpovedí
- 1902 Zobrazení
-
Posledný príspevok od používateľa om0aao
-
- 2 Odpovedí
- 2423 Zobrazení
-
Posledný príspevok od používateľa yuslav