<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Kinetis MicrocontrollersのトピックPE- SDHC Example Project</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/PE-SDHC-Example-Project/m-p/187266#M2028</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am running CW10.1 and the example SDHC project.&amp;nbsp; It seems to work fine as-is Reading/Writing single blocks.&amp;nbsp; I am trying to modify the project to read/write multiple blocks and made the following changes...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1.&amp;nbsp; ReadBuffer[1200UL];&lt;/P&gt;&lt;P&gt;2.&amp;nbsp; Change...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error = SD_ReadBlockPart(&amp;amp;SD, 0x00000000U, 0, Length, ReadBuffer);&lt;/P&gt;&lt;P&gt;to...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error = SD_Read2Blocks(&amp;amp;SD, 0x00000000U, 0, sizeof(ReadBuffer), ReadBuffer);&lt;/P&gt;&lt;P&gt;3.&amp;nbsp;&amp;nbsp; Where the functions are declared...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;bool SD_Read2Blocks(TSDData *SD, uint32_t Address, uint32_t Offset, uint32_t Size, uint8_t *Data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; bool Error = FALSE;&lt;BR /&gt;&amp;nbsp; const uint16_t BlockCount = 2;&lt;BR /&gt;&amp;nbsp; const uint16_t BlockSize = 512;&lt;BR /&gt;&amp;nbsp; static uint8_t Buffer[BlockSize*BlockCount + 4]; /* Data buffer */&lt;BR /&gt;&amp;nbsp; uint8_t *AlignedBuffer = (uint8_t*)(((uint32_t)Buffer + 4) &amp;amp; ~0x03U); /* Align buffer to 4-byte boundary */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; /* Read block */&lt;BR /&gt;&amp;nbsp; Error = SD_TransferBlocks(SD, TRUE, Address, AlignedBuffer, BlockCount);&lt;BR /&gt;&amp;nbsp; /* Cut out block part */&lt;BR /&gt;&amp;nbsp; memcpy(Data, &amp;amp;AlignedBuffer[Offset], Size);&lt;BR /&gt;&amp;nbsp; return Error;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;bool SD_TransferBlocks(TSDData *SD, bool Read, uint32_t Address, uint8_t *Buffer,&amp;nbsp; uint8_t BlockCount)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; bool Error = FALSE;&lt;BR /&gt;&amp;nbsp; const uint16_t BlockSize = 512;&lt;BR /&gt;//&amp;nbsp; const uint16_t BlockCount = 1;&lt;BR /&gt;&amp;nbsp; uint32_t CardAddr = SD_ByteToCardAddress(&amp;amp;SD-&amp;gt;CardInfo, Address); /* Read block address */&lt;BR /&gt;&amp;nbsp; LDD_SDHC_TBufferDesc BufferDesc;&lt;BR /&gt;&amp;nbsp; uint32_t Index;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; /* Init read buffer descriptor */&lt;BR /&gt;&amp;nbsp; BufferDesc.DataPtr = Buffer;&lt;BR /&gt;&amp;nbsp; BufferDesc.Size = BlockSize;&lt;BR /&gt;&amp;nbsp; /* Read card data block */&lt;BR /&gt;&amp;nbsp; SDHC_TransferBlocks(SD-&amp;gt;SDHCPtr, (Read ? LDD_SDHC_READ : LDD_SDHC_WRITE), CardAddr, &amp;amp;BufferDesc, BlockCount);&lt;BR /&gt;&amp;nbsp; SD_Wait(SD, &amp;amp;Error);&lt;BR /&gt;&amp;nbsp; return Error;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It is not working correctly, what am I missing??&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 01 Dec 2011 05:40:54 GMT</pubDate>
    <dc:creator>Carvic</dc:creator>
    <dc:date>2011-12-01T05:40:54Z</dc:date>
    <item>
      <title>PE- SDHC Example Project</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/PE-SDHC-Example-Project/m-p/187266#M2028</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am running CW10.1 and the example SDHC project.&amp;nbsp; It seems to work fine as-is Reading/Writing single blocks.&amp;nbsp; I am trying to modify the project to read/write multiple blocks and made the following changes...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1.&amp;nbsp; ReadBuffer[1200UL];&lt;/P&gt;&lt;P&gt;2.&amp;nbsp; Change...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error = SD_ReadBlockPart(&amp;amp;SD, 0x00000000U, 0, Length, ReadBuffer);&lt;/P&gt;&lt;P&gt;to...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error = SD_Read2Blocks(&amp;amp;SD, 0x00000000U, 0, sizeof(ReadBuffer), ReadBuffer);&lt;/P&gt;&lt;P&gt;3.&amp;nbsp;&amp;nbsp; Where the functions are declared...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;bool SD_Read2Blocks(TSDData *SD, uint32_t Address, uint32_t Offset, uint32_t Size, uint8_t *Data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; bool Error = FALSE;&lt;BR /&gt;&amp;nbsp; const uint16_t BlockCount = 2;&lt;BR /&gt;&amp;nbsp; const uint16_t BlockSize = 512;&lt;BR /&gt;&amp;nbsp; static uint8_t Buffer[BlockSize*BlockCount + 4]; /* Data buffer */&lt;BR /&gt;&amp;nbsp; uint8_t *AlignedBuffer = (uint8_t*)(((uint32_t)Buffer + 4) &amp;amp; ~0x03U); /* Align buffer to 4-byte boundary */&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; /* Read block */&lt;BR /&gt;&amp;nbsp; Error = SD_TransferBlocks(SD, TRUE, Address, AlignedBuffer, BlockCount);&lt;BR /&gt;&amp;nbsp; /* Cut out block part */&lt;BR /&gt;&amp;nbsp; memcpy(Data, &amp;amp;AlignedBuffer[Offset], Size);&lt;BR /&gt;&amp;nbsp; return Error;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;bool SD_TransferBlocks(TSDData *SD, bool Read, uint32_t Address, uint8_t *Buffer,&amp;nbsp; uint8_t BlockCount)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; bool Error = FALSE;&lt;BR /&gt;&amp;nbsp; const uint16_t BlockSize = 512;&lt;BR /&gt;//&amp;nbsp; const uint16_t BlockCount = 1;&lt;BR /&gt;&amp;nbsp; uint32_t CardAddr = SD_ByteToCardAddress(&amp;amp;SD-&amp;gt;CardInfo, Address); /* Read block address */&lt;BR /&gt;&amp;nbsp; LDD_SDHC_TBufferDesc BufferDesc;&lt;BR /&gt;&amp;nbsp; uint32_t Index;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; /* Init read buffer descriptor */&lt;BR /&gt;&amp;nbsp; BufferDesc.DataPtr = Buffer;&lt;BR /&gt;&amp;nbsp; BufferDesc.Size = BlockSize;&lt;BR /&gt;&amp;nbsp; /* Read card data block */&lt;BR /&gt;&amp;nbsp; SDHC_TransferBlocks(SD-&amp;gt;SDHCPtr, (Read ? LDD_SDHC_READ : LDD_SDHC_WRITE), CardAddr, &amp;amp;BufferDesc, BlockCount);&lt;BR /&gt;&amp;nbsp; SD_Wait(SD, &amp;amp;Error);&lt;BR /&gt;&amp;nbsp; return Error;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It is not working correctly, what am I missing??&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 01 Dec 2011 05:40:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/PE-SDHC-Example-Project/m-p/187266#M2028</guid>
      <dc:creator>Carvic</dc:creator>
      <dc:date>2011-12-01T05:40:54Z</dc:date>
    </item>
    <item>
      <title>Re: PE- SDHC Example Project</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/PE-SDHC-Example-Project/m-p/187267#M2029</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;here is the declaration of SDHC_TransferBlocks:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;LDD_TError TransferBlocks(&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; LDD_TDeviceData*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DeviceDataPtr,&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; LDD_SDHC_TTransferOperation Operation,&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; uint32_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Address,&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; LDD_SDHC_TBufferDesc*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#3366FF"&gt;BufferDescListPtr&lt;/FONT&gt;,&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; uint16_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#3366FF"&gt;BufferDescCount&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;where BufferDescListPtr is a pointer to an array and BufferDescCount is the number of items of the array.&lt;/P&gt;&lt;P&gt;The best way how to transfer several blocks is to allocate buffers for the blocks and pass them to the function, for example:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;uint8_t Buffers[BLOCK_COUNT][BLOCK_SIZE]; // Individual buffers must be properly aligned to a memory boundary!&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;LDD_SDHC_TBufferDesc BufferDesc[BLOCK_COUNT];&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;for (Index = 0; Index &amp;lt; BLOCK_COUNT; Index++) {&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; BufferDesc[Index].DataPtr = Buffers[Index];&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; BufferDesc[Index].Size = BLOCK_SIZE;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;SDHC_TransferBlocks(..., ..., ..., BufferDesc, BLOCK_COUNT);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 01 Dec 2011 21:49:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/PE-SDHC-Example-Project/m-p/187267#M2029</guid>
      <dc:creator>LadislavVadkerti</dc:creator>
      <dc:date>2011-12-01T21:49:25Z</dc:date>
    </item>
  </channel>
</rss>

