SPI-Slave Problem(e)

Gast #3395234
Lesenswert?

Hallo zusammen,

ich habe ein (hoffentlich einfach zu lösendes) Problem bezüglich der 
Nutzung eines in VHDL programierten SPI-Slaves:

Ich nutze folgende Vorlage: 
http://www.lothar-miller.de/s9y/archives/31-SPI-Slave-im-CPLD.html#extended 
da ich die Nutzung des Schieberegisters sehr Elegant finde (im Vergleich 
zu Lösungen mit Countern).

Das Empfangen mit dem Slave funktioniert wunderbar. Die paar Zeilen des 
Sendens verursachen jedoch Warnings beim synthetisieren und führen zudem 
nicht zum erhofften Ergebnis.
1
entity cSpiSlave is
2
Port ( 
3
in_CLK   : in   STD_LOGIC := 'X';
4
in_MOSI : in   STD_LOGIC := 'X';
5
in_CS   : in   STD_LOGIC := 'X';
6
out_MISO: out  STD_LOGIC := 'X';
7
o_RxData : out  STD_LOGIC_VECTOR (16-1 downto 0)
8
);
9
end cSpiSlave;
10

11
architecture VERHALTEN of cSpiSlave is
12

13
signal int_DataRx : STD_LOGIC_VECTOR (16-1 downto 0)  := x"5554";  
14
signal int_DataTx : STD_LOGIC_VECTOR (16-1 downto 0);
15

16
begin
17

18
process(in_CLK,in_CS)
19
begin
20
 if rising_edge(in_CLK) then
21
  if (in_CS = '0') then
22
   int_DataRx <= int_DataRx(16-2 downto 0) & in_MOSI; 
23
  end if;
24
 end if;
25
end process;
26
---------------------------------------------------------------------------
27
o_RxData <= int_DataRx when in_CS='1' else x"4444"; 
28

29

30
Bis hier klappt alles BESTENS! Aber dann kommt:
31

32
process (in_CS, int_DataTx, in_CLK)   
33
begin
34
 if (in_CS='1') then
35
  int_DataTx <= x"FAFA";
36
 elsif falling_edge(in_CLK) then                  
37
  int_DataTx <= int_DataTx(16-2 downto 0) & '0';
38
 end if;
39
end process;
40
out_MISO <= int_DataTx(15) when in_CS='0' else 'Z';


Hier die Probleme:

1.) int_DataTx <= x"FFFF"; diese Zuweisung versursacht Warnings, wenn 
nicht FFFF sonden Werte von 1 verschieden zugewiesen werden.

WARNING:Xst:1710 - FF/Latch <int_DataTx_0> (without init value) has a 
constant value of 0 in block <SPI_inst1>. This FF/Latch will be trimmed 
during the optimization process.

WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch 
<int_DataTx_1> (without init value) has a constant value of 0 in block 
<SPI_inst1>. This FF/Latch will be trimmed during the optimization 
process.


2.) Auf Master-Seite kommen nicht die korrekten Informationen an. Hat 
jemand eine Erklärung dafür? (Aus 0xFAFA wird beim Empfang 0xF7BD, aus 
0xCF03 wird 0x9249 und aus 0xFFFF wird 0xFFFE??)
Moderator (Firma: Titel) Persönliche Seite #3395282
Lesenswert?

engineer_on_tour schrieb:
> 1.) int_DataTx <= x"FFFF"; diese Zuweisung versursacht Warnings, wenn
> nicht FFFF sonden Werte von 1 verschieden zugewiesen werden.
Dem Vektor int_DataTx wird nie ein (sinnvoller) Wert zugewiesen, deshalb 
gibts die Warnungen, weil Teile des Vektors als statisch erkannt werden.

> 2.) Auf Master-Seite kommen nicht die korrekten Informationen an.
Hast du ein Oszi? Was geht tatsächlich auf den Bus raus?

> Hat jemand eine Erklärung dafür?
Wenn sonst alles passt, dann am ehesten: falscher SPI Mode...
Gast #3395356
Lesenswert?

Lothar Miller schrieb:
> Dem Vektor int_DataTx wird nie ein (sinnvoller) Wert zugewiesen, deshalb
> gibts die Warnungen, weil Teile des Vektors als statisch erkannt werden.

Wie sollte ich denn (bis ich keine statischen sondern von einer 
StateMachine erzeugte Daten senden möchte) eine Zuweisung machen, damit 
keine Warnung auftritt?


Die Oszi-Messungen mache ich jetzt und kann gleich Bilder liefern. Die 
SPi-Modes werde ich jetzt einfach mal durchtesten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren