<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=23073&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-04-29T18:39:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23073&amp;mode</id>
<entry>
<author><name><![CDATA[xpatrgk]]></name></author>
<updated>2020-04-29T18:39:01+01:00</updated>
<published>2020-04-29T18:39:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23073&amp;p=226755#p226755</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23073&amp;p=226755#p226755"/>
<title type="html"><![CDATA[Re: Karta SD - SPI przy użyciu USARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23073&amp;p=226755#p226755"><![CDATA[
Wiem że można podpiąć kilka urządzeń pod spi, ale niestety to nie jest rozwiązanie w moim przypadku. Problem rozwiązałem, pochopnie usunąłem poprawki pana Mirosława. Wystarczyło w funkcji rcv_spi() na początku przerobić zapis: UDR1 = 0xFF;. Dziękuję za chęć pomocy i pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21121">xpatrgk</a> — 29 kwi 2020, o 18:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tomek86]]></name></author>
<updated>2020-04-29T16:01:41+01:00</updated>
<published>2020-04-29T16:01:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23073&amp;p=226751#p226751</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23073&amp;p=226751#p226751"/>
<title type="html"><![CDATA[Re: Karta SD - SPI przy użyciu USARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23073&amp;p=226751#p226751"><![CDATA[
Jak używasz biblioteki PetitFS z bluebooka to pewno czytałeś rozdział Sprzętowa obsługa SPI ... na stronie 313 masz poglądowy schemat jak podłączyć wiele urządzeń slave na magistrali SPI i sterować linią CS.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12012">Tomek86</a> — 29 kwi 2020, o 16:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xpatrgk]]></name></author>
<updated>2020-04-29T13:31:08+01:00</updated>
<published>2020-04-29T13:31:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23073&amp;p=226744#p226744</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23073&amp;p=226744#p226744"/>
<title type="html"><![CDATA[Karta SD - SPI przy użyciu USARTA]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23073&amp;p=226744#p226744"><![CDATA[
Witam, mam problem z podłączeniem karty SD do ATmegi164A. W projekcie wykorzystuję już jeden SPI, dlatego do podłączenia karty chciałem użyć USARTA w trybie Master (MSPIM). I tu pojawia się problem, nie moge nigdzie znaleźć w internetach jakiegoś gotowego przykładu na którym mógłbym się wzorować. Proces inicjalizacji oraz wysyłanie danych robię na podstawie datasheetu atmegi.<br />Robił ktoś może komunikacje SPI przy pomocy uarta i mógłby mi pomóc/naprowadzić mnie? Do obsługi karty SD korzystam z przerobionych bibliotek PetitFS z bluebooka. Zmiany jakie wprowadziłem w bibliotece zamieszczam na dole. Z tego co udało mi się dojść program &quot;staje&quot; w disk_initialize(), a dokładnie w funkcji rcv_spi(). Nie wiem czy źle wykonuje inicjalizację MSPIM czy moze źle wykonuję odczyt odebranych danych. Wszystko zasilane 3V3, kwarc zewnętrzny 11.0592. Wydaje mi sie ze ze strony połączenia wszystko dobrze zrobiłem, sprawdzałem kilka razy, także wydaje mi się że wina leży po stronie softu. Bardzo dziękuję z góry za pomoc. Pozdrawiam, Patryk.<br /><br />Połączenie SPI:<br />uC - SD<br />PD2 MISO - RX1<br />PD3 MOSI - TX1<br />PD4 SCK - XCK1<br />PD5 - CS<br /><br />Main:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;PetitFS/diskio.h&quot;<br />#include &quot;PetitFS/pff.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;ISP/isp.h&quot;<br /><br />#define F_CPU 11059200UL<br />#define SD_UART_BAUDRATE 100000L<br /><br />#define CS PD5<br />#define CS_ON() PORTD &amp;= ~(1&lt;&lt;CS)<br />#define CS_OFF() PORTD |= (1&lt;&lt;CS)<br /><br />//SPI karta SD<br />void USART_Init(unsigned int baud);<br /><br />#define XCK1_DDR DDRD<br />#define XCK1 PD4<br /><br />char file_name&#91;&#93; = &quot;test.txt&quot;;<br />char bufor&#91;128&#93;;<br /><br />int main()<br />{<br />lcd_init();<br /><br />//sprawdzanie karty SD<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;Init SD card&quot;);<br /><br />#define SD_MOSI PD3<br />#define SD_MISO PD2<br />#define SD_SCK PD4<br />#define SD_CS PD5<br /><br />BYTE res;<br />WORD s1;<br /><br />FATFS fs;<br /><br />USART_Init(9600);<br /><br />//DDRD |= (1&lt;&lt;SD_CS)|(1&lt;&lt;SD_MOSI)|(1&lt;&lt;SD_SCK)|(1&lt;&lt;SD_CS);<br />DDRD |= (1&lt;&lt;SD_CS);<br />PORTD |= (1&lt;&lt;SD_CS);<br />_delay_ms(100);<br /><br />_delay_ms(1000);<br /><br />lcd_cls();<br />lcd_str(&quot;odczyt: test.txt&quot;);<br />lcd_locate(1, 0);<br /><br />_delay_ms(1000);<br /><br />res = disk_initialize();<br />_delay_ms(100);<br /><br />uint8_t i = 255;<br />while (i-- &amp;&amp; (res = disk_initialize()))<br />;<br /><br /><br />/*<br />...<br />tu wycialem bo i tak nie dochodzi program do tego momentu<br />...<br />*/<br /><br /><br />while(1)<br />{<br /><br />}<br />}<br /><br />//USART jakos spi master mode<br /><br />void USART_Init(unsigned int baud)<br />{<br />uint16_t toUBRR;<br /><br />UBRR1 = 0;<br />/* Setting the XCKn port pin as output, enables master mode. */<br />XCK1_DDR |= (1&lt;&lt;XCK1);<br />/* Set MSPI mode of operation and SPI data mode 0. */<br />UCSR1C = (1&lt;&lt;UMSEL11)|(1&lt;&lt;UMSEL10)|(0&lt;&lt;UCPHA1)|(0&lt;&lt;UCPOL1);<br />/* Enable receiver and transmitter. */<br />UCSR1B = (1&lt;&lt;RXEN1)|(1&lt;&lt;TXEN1);<br />/* Set baud rate. *//* IMPORTANT: The Baud Rate must be set after the transmitter is enabled */<br />//toUBRR = (F_CPU/(2*bitRate))-1;<br />//UBRR0H = (uint8_t)(toUBRR &gt;&gt; 8);<br />//UBRR0L = (uint8_t)toUBRR;<br /><br />UBRR1 = ((F_CPU/(2*baud))-1); //0x03???<br />}<br /><br /><br /><br />}[/syntax]<br /><br /><br />Zmiany wprowadzone w pliku mmc.c:<br />[syntax=c]uint8_t xmit_spi(uint8_t dat)<br />{<br />/* Wait for empty transmit buffer */<br />while (!( UCSR1A &amp; (1 &lt;&lt; UDRE1)));<br />/* Put data into buffer, sends the data */<br />UDR1 = dat;<br /><br />while ( !(UCSR1A &amp; (1&lt;&lt;RXC1)) );<br />return UDR1;<br /><br /><br />}<br /><br />static<br />BYTE rcv_spi (void)<br />{<br />/* Wait for data to be received */<br />while ( !(UCSR1A &amp; (1&lt;&lt;RXC1)) );<br />/* Get and return received data from buffer */<br />return UDR1;<br /><br /><br />}<br /><br />/* Port Controls (Platform dependent) */<br />/* Port Controls (Platform dependent) */<br />#define SELECT()PORTD &amp;= ~(1&lt;&lt;PD5)/* MMC CS = L */<br />#defineDESELECT()PORTD |=  (1&lt;&lt;PD5)/* MMC CS = H */<br />#defineMMC_SEL!(PORTD &amp;  (1&lt;&lt;PD5))/* MMC CS status (true:selected) */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21121">xpatrgk</a> — 29 kwi 2020, o 13:31</p><hr />
]]></content>
</entry>
</feed>