<?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=46&amp;t=12355&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-07-16T15:22:04+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=12355&amp;mode</id>
<entry>
<author><name><![CDATA[Pogan]]></name></author>
<updated>2015-07-16T15:22:04+01:00</updated>
<published>2015-07-16T15:22:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=12355&amp;p=134714#p134714</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=12355&amp;p=134714#p134714"/>
<title type="html"><![CDATA[Obsługa kart SD po 4 bitowym SDIO w STm32F4Discovery]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=12355&amp;p=134714#p134714"><![CDATA[
Witam<br /><br />Podczas pisania programu na STM32F4 natrafiłem na pewien problem, a mianowicie procek nie chce obsługiwać karty SD po magistrali 4 bitowej SDIO. W trybie 1 bitowym wszystko działa, jednak w trybie 4 bitowym FATfs wyrzuca mi błąd niskopoziomowej obsługi magistrali. Czy ma ktoś jakiś pomysł co może być przyczyną? <br /><br />[syntax=c]/**<br /> /**<br />  ******************************************************************************<br />  * File Name          : main.c<br />  * Description        : Main program body<br />  ******************************************************************************<br />  *<br />  * COPYRIGHT(c) 2015 STMicroelectronics<br />  *<br />  * Redistribution and use in source and binary forms, with or without modification,<br />  * are permitted provided that the following conditions are met:<br />  *   1. Redistributions of source code must retain the above copyright notice,<br />  *      this list of conditions and the following disclaimer.<br />  *   2. Redistributions in binary form must reproduce the above copyright notice,<br />  *      this list of conditions and the following disclaimer in the documentation<br />  *      and/or other materials provided with the distribution.<br />  *   3. Neither the name of STMicroelectronics nor the names of its contributors<br />  *      may be used to endorse or promote products derived from this software<br />  *      without specific prior written permission.<br />  *<br />  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;<br />  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE<br />  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE<br />  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE<br />  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL<br />  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR<br />  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER<br />  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,<br />  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE<br />  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br />  *<br />  ******************************************************************************<br />  */<br />/* Includes ------------------------------------------------------------------*/<br />#include &quot;stm32f4xx_hal.h&quot;<br />#include &quot;fatfs.h&quot;<br /><br />/* USER CODE BEGIN Includes */<br />//arm-none-eabi-objcopy -O binary &quot;${BuildArtifactFileBaseName}.elf&quot; &quot;${BuildArtifactFileBaseName}.bin&quot;<br />/* USER CODE END Includes */<br /><br />/* Private variables ---------------------------------------------------------*/<br />SD_HandleTypeDef hsd;<br />HAL_SD_CardInfoTypedef SDCardInfo;<br /><br />UART_HandleTypeDef huart2;<br /><br />/* USER CODE BEGIN PV */<br />FATFS fs;<br />FIL fp;<br />uint8_t buf&#91;&#93; = { &quot;kolejne testy&quot; };<br />uint8_t tab&#91;50&#93;;<br />UINT br;<br />FRESULT fr;<br /><br /><br />/* USER CODE END PV */<br /><br />/* Private function prototypes -----------------------------------------------*/<br />void SystemClock_Config(void);<br />static void MX_GPIO_Init(void);<br />static void MX_SDIO_SD_Init(void);<br />static void MX_USART2_UART_Init(void);<br /><br />/* USER CODE BEGIN PFP */<br /><br />/* USER CODE END PFP */<br /><br />/* USER CODE BEGIN 0 */<br /><br />/* USER CODE END 0 */<br /><br />int main(void)<br />{<br /><br />  /* USER CODE BEGIN 1 */<br /><br />  /* USER CODE END 1 */<br /><br />  /* MCU Configuration----------------------------------------------------------*/<br /><br />  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */<br />  HAL_Init();<br /><br />  /* Configure the system clock */<br />  SystemClock_Config();<br /><br />  /* Initialize all configured peripherals */<br />  MX_GPIO_Init();<br />  MX_SDIO_SD_Init();<br />  MX_USART2_UART_Init();<br />  MX_FATFS_Init();<br /><br />  /* USER CODE BEGIN 2 */<br />  f_mount(&amp;fs, &quot;0&quot;, 1);<br /><br />  f_open (&amp;fp, &quot;test.txt&quot;, FA_READ | FA_WRITE);<br /><br /><br /><br />  //fr = f_lseek(&amp;fp, fp.fsize);<br /><br />  //f_puts((const char*)buf, &amp;fp);<br />  f_gets((char*)tab, 50, &amp;fp);<br />  //tab&#91;0&#93; = ( fr + 48 );<br />  HAL_UART_Transmit_IT(&amp;huart2, tab, 50);<br />  f_close(&amp;fp);<br /><br />  while(1);<br /><br /><br />  f_close(&amp;fp);<br /><br />  /* USER CODE END 2 */<br /><br />  /* Infinite loop */<br />  /* USER CODE BEGIN WHILE */<br />  while (1)<br />  {<br />  /* USER CODE END WHILE */<br /><br />  /* USER CODE BEGIN 3 */<br /><br /><br />  }<br />  /* USER CODE END 3 */<br /><br />}<br /><br />/** System Clock Configuration<br />*/<br />void SystemClock_Config(void)<br />{<br /><br />  RCC_OscInitTypeDef RCC_OscInitStruct;<br />  RCC_ClkInitTypeDef RCC_ClkInitStruct;<br /><br />  __PWR_CLK_ENABLE();<br /><br />  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);<br /><br />  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;<br />  RCC_OscInitStruct.HSEState = RCC_HSE_ON;<br />  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;<br />  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;<br />  RCC_OscInitStruct.PLL.PLLM = 8;<br />  RCC_OscInitStruct.PLL.PLLN = 192;<br />  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;<br />  RCC_OscInitStruct.PLL.PLLQ = 4;<br />  HAL_RCC_OscConfig(&amp;RCC_OscInitStruct);<br /><br />  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1<br />                              |RCC_CLOCKTYPE_PCLK2;<br />  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;<br />  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;<br />  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;<br />  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV4;<br />  HAL_RCC_ClockConfig(&amp;RCC_ClkInitStruct, FLASH_LATENCY_3);<br /><br />  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);<br /><br />  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);<br /><br />}<br /><br />/* SDIO init function */<br />void MX_SDIO_SD_Init(void)<br />{<br /><br />  hsd.Instance = SDIO;<br />  hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;<br />  hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;<br />  hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;<br />  hsd.Init.BusWide = SDIO_BUS_WIDE_1B;<br />  hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;<br />  hsd.Init.ClockDiv = 0;<br /><br />}<br /><br />/* USART2 init function */<br />void MX_USART2_UART_Init(void)<br />{<br /><br />  huart2.Instance = USART2;<br />  huart2.Init.BaudRate = 115200;<br />  huart2.Init.WordLength = UART_WORDLENGTH_8B;<br />  huart2.Init.StopBits = UART_STOPBITS_1;<br />  huart2.Init.Parity = UART_PARITY_NONE;<br />  huart2.Init.Mode = UART_MODE_TX_RX;<br />  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;<br />  huart2.Init.OverSampling = UART_OVERSAMPLING_16;<br />  HAL_UART_Init(&amp;huart2);<br /><br />}<br /><br />/** Configure pins as <br />        * Analog <br />        * Input <br />        * Output<br />        * EVENT_OUT<br />        * EXTI<br />*/<br />void MX_GPIO_Init(void)<br />{<br /><br />  GPIO_InitTypeDef GPIO_InitStruct;<br /><br />  /* GPIO Ports Clock Enable */<br />  __GPIOH_CLK_ENABLE();<br />  __GPIOA_CLK_ENABLE();<br />  __GPIOD_CLK_ENABLE();<br />  __GPIOC_CLK_ENABLE();<br /><br />  /*Configure GPIO pin : PD12 */<br />  GPIO_InitStruct.Pin = GPIO_PIN_12;<br />  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;<br />  GPIO_InitStruct.Pull = GPIO_NOPULL;<br />  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;<br />  HAL_GPIO_Init(GPIOD, &amp;GPIO_InitStruct);<br /><br />}<br /><br />/* USER CODE BEGIN 4 */<br /><br />/* UART functions */<br /><br />/* USER CODE END 4 */<br /><br />#ifdef USE_FULL_ASSERT<br /><br />/**<br />   * @brief Reports the name of the source file and the source line number<br />   * where the assert_param error has occurred.<br />   * @param file: pointer to the source file name<br />   * @param line: assert_param error line source number<br />   * @retval None<br />   */<br />void assert_failed(uint8_t* file, uint32_t line)<br />{<br />  /* USER CODE BEGIN 6 */<br />  /* User can add his own implementation to report the file name and line number,<br />    ex: printf(&quot;Wrong parameters value: file %s on line %d\r\n&quot;, file, line) */<br />  /* USER CODE END 6 */<br /><br />}<br /><br />#endif<br /><br />/**<br />  * @}<br />  */ <br /><br />/**<br />  * @}<br />*/ <br /><br />/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/[/syntax]<br /><br /><br />Z góry dzięki za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5717">Pogan</a> — 16 lip 2015, o 15:22</p><hr />
]]></content>
</entry>
</feed>