📄 faq_hdk.htm
字号:
<html><!-- InstanceBegin template="/Templates/helpnav.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<!-- InstanceBeginEditable name="doctitle" -->
<title>Frequently Asked Questions</title>
<!-- InstanceEndEditable -->
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<!-- InstanceBeginEditable name="head" -->
<!-- InstanceEndEditable -->
<!-- InstanceParam name="HeaderColor" type="color" value="#0000FF" -->
<!-- InstanceParam name="FooterColor" type="color" value="#0000FF" -->
<!-- InstanceParam name="NavBackgroundColor" type="color" value="#FFFFFF" -->
<!-- InstanceParam name="BodyBackgroundColor" type="color" value="#FFFFFF" -->
<link href="CodeTHelp.css" rel="stylesheet" type="text/css">
</head><a name="TopTopic"></a>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table width="100%" border="0" cellspacing="0" cellpadding="4">
<tr>
<td width="40%" rowspan="2" bgcolor="#0000FF"><a href="http://www.codetelligence.com"><img src="Images/codetelligence_lrg.gif" name="image" width="252" height="40" border="0"></a></td>
<td width="60%" height="62" bgcolor="#0000FF">
<font color="#FFFFFF" size="5" face="Arial, Helvetica, sans-serif"><strong>Embedded SDIO Driver Kit Help </strong></font></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="10" cellpadding="0">
<tr>
<td width="93%"><font face="Arial, Helvetica, sans-serif">
<p class="Topic"><!-- InstanceBeginEditable name="SubTemplate" -->Frequently
Asked Questions - HDK<!-- InstanceEndEditable --> </p>
</font></td>
<td><!-- InstanceBeginEditable name="NavBack" -->
<a href="faq_pdk.htm"><img src="Images/leftarrow.gif" width="27" height="32" border="0"></a><!-- InstanceEndEditable --></td><td><!-- InstanceBeginEditable name="Nav" --><a href="contact.htm"><img src="Images/rightarrow.gif" width="27" height="32" border="0"></a>
<!-- InstanceEndEditable --></td>
</tr>
</table>
<hr>
<table width="100%" border="0" cellspacing="0" cellpadding="15">
<tr><td>
<!-- InstanceBeginEditable name="Help Content" -->
<a name="BackToTop"></a>
<p class="BODYTEXT"> <strong>HDK Topics:
</strong>
<table width="70%" border="0">
<tr>
<td><a href="#pdkfaq1">I found in the HCD sample code that the driver has the possibility to enable/disable clock control after each request.
Why is the clock turned off? For example in wifi or bluetooth communication, does the device card always need a clock on it ?
</a></td>
</tr>
<tr>
<td><a href="#pdkfaq2">I am developing a new host controller driver, I need to configure my hardware based on the command type (SD/MMC memory or SDIO command) , also
I need to know if the operation is suspending an outstanding command which will be resumed later (as per SDIO spec).
</a></td></tr>
<tr>
<td><a href="#pdkfaq3">What clock rate should I use as a threshold for determining whether I should process a command/response operation using register polling?
</a> </td>
</tr>
<tr>
<td><a href="#pdkfaq4">What are the consequences of not implementing a mechanical switch for card insert detection? Is polling supported?</a></td>
</tr>
<!-- <tr>
<td><a href="#pdkfaq5">ques5</a></td>
</tr> -->
</table>
</p>
<p class="HEADING3"><strong><a name="pdkfaq1"></a>I found in the HCD sample code that the driver has the possibility to enable/disable clock control after each request.
Why is the clock turned off? For example in wifi or bluetooth communication, does the device card always need a clock on it ?
</strong></p>
<p class="BODYTEXT">
There is a common misconception that the SD or MMC clock drives card-side logic. This is not the case.
The clock is only used in communications. The SDIO card has to use its own clock for logic. The spec allows
for the host to remove the clock at any time to either pause communications or to reduce power.
In the sample code the clock is turned off only after the full transaction has completed.
The only exception to having the clock on all the time is for cards that use 4 bit interrupts.
Since the interrupt and the DATA1 line are shared, the card uses the clock to monitor the
state of the bus and only drive the interrupt line when the bus is idle and during block gaps.
If you look at the PCI ellen card driver, when the host requests 4-bit interrupt support,
the PCI ellen driver sets a flag to keep the clock active even when a transaction is complete.
<blockquote>
<a href="#BackToTop">Back
to top.</a></p>
</blockquote>
<p class="HEADING3"><strong><a name="pdkfaq2"></a>I am developing a new host controller driver, I need to configure my hardware based on the command type (SD/MMC memory or SDIO command) , also
I need to know if the operation is suspending an outstanding command which will be resumed later (as per SDIO spec).</strong></p>
<p class="BODYTEXT">If your controller needs information on whether it is a memory
or I/O command, you will need to put a switch statement in your hcdrequest
callback and check the command code.
Our architecture breaks down commands into its basic elements (command code,
argument, expected response, and data blocks) , this makes it more extensible
for new commands. If you need to know if it is a memory or SDIO command, you
will need to add your own
switch statement and check every command. For SDIO commands, CMD5,CMD52 and
CMD53 can be checked. Everything else would fall under SD/MMC commands.
As for I/O suspend/resume, the stack does not support this feature.
All bus commands must complete and cannot be preempted by other commands.
<blockquote>
<a href="#BackToTop">Back
to top.</a></p>
</blockquote>
<p class="HEADING3"><strong><a name="pdkfaq3"></a>What clock rate should I use as a threshold for determining whether I should process a command/response operation using register polling?</strong></p>
<p class="BODYTEXT">
5 Mhz is common in the provided driver samples. If you make it a module parameter,
your end users (developers) can ultimately decide for themselves. Generally
if
the command can take less than 25-40us, you
should use polling as the interrupt/context switch overhead can be greater than
that. For a command you have:
48 + (up to) 64 + (up to) 136 = ~248 bit times @ 5 mhz = ~50us.
On average this is probably more like 15-20 us, since most commands have just
a 48 bit response and most commands do not take the entire 64 clocks to respond.
You could take a more fine grained approach and calculate the number of response
bits and adjust accordingly. We've found that anything higher than 5Mhz clock
rate should be done with polling to save the
interrupt context switch time.
</p>
<blockquote>
<a href="#BackToTop">Back
to top.</a></p>
</blockquote>
<p class="HEADING3"><strong><a name="pdkfaq4"></a>What are the consequences of not implementing a mechanical switch for card insert detection? Is polling supported?</strong></p>
<p class="BODYTEXT">The bus driver can handle HCDs that require periodic polling
for card insertion or removal. The HCD simply has to indicate this in an HCD
atrribute bit.
Slot polling uses a command every 1 second to check for presence or removal.
The command issued is benign and is usually fetching the Card Version register
for SDIO
cards or the card status for SD/MMC cards. For many systems this is good enough
and the additional bus request every second does not impact driver performance.
However, for battery powered systems, this polling interval may prevent the
CPU from going
into full idle. Depending on how the system is designed, this may not have
any impact at all.</p>
<blockquote>
<a href="#BackToTop">Back
to top.</a></p>
</blockquote>
<!--
<p class="HEADING3"><strong><a name="pdkfaq9"></a>topic9</strong></p>
<p class="BODYTEXT"> answer
</p>
<blockquote>
<a href="#BackToTop">Back
to top.</a></p>
</blockquote> -->
<!-- InstanceEndEditable -->
<br/></table></td></tr>
<table width="100%" border="0" cellspacing="0" cellpadding="2" >
<tr> <td><div align="right"><a href="#TopTopic">Back to top</a></div></td></tr>
<tr bgcolor="#0000FF">
<td>
<font color="#FFFFFF"face="Arial, Helvetica, sans-serif"><strong>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -