<?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>i.MX ProcessorsのトピックiMX28 SPI max clock rate</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/iMX28-SPI-max-clock-rate/m-p/283066#M32964</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;linux-2.6.35.3\drivers\spi\spi_mxs.c tries to set the maximum clock rate using the lines&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;rate = 1000 * ss-&amp;gt;speed_khz / ss-&amp;gt;divider / hz;&lt;/P&gt;&lt;P&gt;__raw_writel(BF_SSP_TIMING_CLOCK_DIVIDE(ss-&amp;gt;divider) |&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; BF_SSP_TIMING_CLOCK_RATE(rate - 1),&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; ss-&amp;gt;regs + HW_SSP_TIMING);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However this should round up the calculated rate variable otherwise the clock is set beyond the rate requested, e.g.&lt;/P&gt;&lt;P&gt;ss-&amp;gt;speed_khz = 24000&lt;/P&gt;&lt;P&gt;ss-&amp;gt;divider = 2&lt;/P&gt;&lt;P&gt;hz = 7000000&amp;nbsp; (requesting max rate of 7MHz)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;==&amp;gt; rate = 1&amp;nbsp; (rounded down from 1.7)&lt;/P&gt;&lt;P&gt;==&amp;gt; SPI clock = 24000000 / (2 * (1+0)) = 12000000, i.e. 12MHz&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This can be fixed in many ways.&amp;nbsp; I did&lt;/P&gt;&lt;P&gt;if ((1000 * ss-&amp;gt;speed_khz) &amp;gt; (rate * ss-&amp;gt;divider * hz))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rate++; /* round up */&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;Matt.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 24 Apr 2013 16:22:06 GMT</pubDate>
    <dc:creator>Matt_</dc:creator>
    <dc:date>2013-04-24T16:22:06Z</dc:date>
    <item>
      <title>iMX28 SPI max clock rate</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/iMX28-SPI-max-clock-rate/m-p/283066#M32964</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;linux-2.6.35.3\drivers\spi\spi_mxs.c tries to set the maximum clock rate using the lines&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;rate = 1000 * ss-&amp;gt;speed_khz / ss-&amp;gt;divider / hz;&lt;/P&gt;&lt;P&gt;__raw_writel(BF_SSP_TIMING_CLOCK_DIVIDE(ss-&amp;gt;divider) |&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; BF_SSP_TIMING_CLOCK_RATE(rate - 1),&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; ss-&amp;gt;regs + HW_SSP_TIMING);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However this should round up the calculated rate variable otherwise the clock is set beyond the rate requested, e.g.&lt;/P&gt;&lt;P&gt;ss-&amp;gt;speed_khz = 24000&lt;/P&gt;&lt;P&gt;ss-&amp;gt;divider = 2&lt;/P&gt;&lt;P&gt;hz = 7000000&amp;nbsp; (requesting max rate of 7MHz)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;==&amp;gt; rate = 1&amp;nbsp; (rounded down from 1.7)&lt;/P&gt;&lt;P&gt;==&amp;gt; SPI clock = 24000000 / (2 * (1+0)) = 12000000, i.e. 12MHz&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This can be fixed in many ways.&amp;nbsp; I did&lt;/P&gt;&lt;P&gt;if ((1000 * ss-&amp;gt;speed_khz) &amp;gt; (rate * ss-&amp;gt;divider * hz))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rate++; /* round up */&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;Matt.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 24 Apr 2013 16:22:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/iMX28-SPI-max-clock-rate/m-p/283066#M32964</guid>
      <dc:creator>Matt_</dc:creator>
      <dc:date>2013-04-24T16:22:06Z</dc:date>
    </item>
    <item>
      <title>Re: iMX28 SPI max clock rate</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/iMX28-SPI-max-clock-rate/m-p/283067#M32965</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi &lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;Matt&lt;/SPAN&gt;,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Your change is correct. Thanks for your correction.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Grace&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 07 May 2013 06:28:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/iMX28-SPI-max-clock-rate/m-p/283067#M32965</guid>
      <dc:creator>GraceH</dc:creator>
      <dc:date>2013-05-07T06:28:46Z</dc:date>
    </item>
  </channel>
</rss>

