A supported software update is now available from Microsoft as Windows CE 5.0 Platform Builder Monthly Update (April 2007). You can confirm this by scrolling to the "File information" section of this article. The package file name contains the product version, date, Knowledge Base article number, and processor type. The package file name format is:
Product version-yymmdd-kbnnnnnn-processor type
For example: Wincepb50-060503-kb917590-armv4i.msi is the ARMV4i Windows CE 5.0 Platform Builder fix that is documented in KB article 917590 and that is contained in the May 2006 monthly update. To resolve this problem immediately, click the following article number for information about obtaining Windows CE Platform Builder and core operating system software updates:
837392
(http://support.microsoft.com/kb/837392/
)
How to locate core operating system fixes for Microsoft Windows CE Platform Builder products
Prerequisites
This software update is supported only if all previously issued software updates for this product have also been applied.
Restart requirement
After you apply this software update, you must perform a clean build of the whole platform. To clean the platform, click Clean on the Build menu. To build the platform, click Build Platform on the Build menu. You do not have to restart the computer after you apply this software update.
Software update replacement information
This software update does not replace any other software updates.
File information
The English version of this software update package has the file attributes, or the later file attributes, that are listed in the following table.
Collapse this tableExpand this table
File name
File size
Date
Time
Wincepb50-070405-kb933809-armv4i.msi
2,460,160
06-Apr-2007
22:47
Wincepb50-070405-kb933809-mipsii.msi
2,506,752
06-Apr-2007
22:47
Wincepb50-070405-kb933809-mipsii_fp.msi
2,511,872
06-Apr-2007
22:47
Wincepb50-070405-kb933809-mipsiv.msi
2,533,888
06-Apr-2007
22:47
Wincepb50-070405-kb933809-mipsiv_fp.msi
2,534,400
06-Apr-2007
22:47
Wincepb50-070405-kb933809-sh4.msi
2,412,544
06-Apr-2007
22:47
Wincepb50-070405-kb933809-x86.msi
2,280,960
06-Apr-2007
22:47
The English version of this software update has the file attributes (or later file attributes) that are listed in the following table. The dates and times for these files are listed in Coordinated Universal Time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the Time Zone tab in the Date and Time item in Control Panel.
This software update installs an SD bus driver that is compliant with the SD 2.0 specification. Additionally, this software update installs an enhanced SD memory card driver that supports high-capacity SD cards that are as large as 32 GB.
If you use your own custom SD host controller driver, you may have to update your driver. To do this, use the following information.
SD host controller considerations
The new SD Physical Layer Specification 2.0 is targeted only to the SD bus. Therefore, you do not have to change the SD host controller. However, a common problem occurs because of the new command support that exists in the SD 2.0 specification that uses Response 7. When you submit a request in the SD host controller, make sure that Response 7 is handled. Otherwise, the request fails with an SD_API_STATUS_INVALID_PARAMETER error. To handle Response 7, you can introduce a new enum variable for the command response in the SD host controller.
How to handle SD_API_STATUS codes
You may handle SD_API_STATUS codes by using code that resembles the following code example. The new SD bus and enhanced SD memory drivers for high-capacity card support may require OEMs to modify SD host controller software if the software is tightly coded to SD 1.1 commands.
Note The following code example applies to SD host controller sample drivers that are delivered by using Platform Builder 5.0.
CSDHCSlotBase::SubmitBusRequestHandler( PSD_BUS_REQUEST pRequest)
{
…
// Bypass CMD12 if AutoCMD12 was done by the hardware.
…
// Initialize the command register by using the command code.
wRegCommand = (pRequest->CommandCode << CMD_INDEX_SHIFT) & CMD_INDEX_MASK;
// Check for a response.
switch (pRequest->CommandResponse.ResponseType) {
case NoResponse:
break;
case ResponseR2:
wRegCommand |= CMD_RESPONSE_R2;
break;
case ResponseR3:
case ResponseR4:
wRegCommand |= CMD_RESPONSE_R3_R4;
break;
case ResponseR1:
case ResponseR5:
case ResponseR6:
case ResponseR7:
wRegCommand |= CMD_RESPONSE_R1_R5_R6_R7;
break;
case ResponseR1b:
wRegCommand |= CMD_RESPONSE_R1B_R5B;
break;
default:
status = SD_API_STATUS_INVALID_PARAMETER;
goto EXIT;
}
…
}
Changes to support high-capacity SD memory cards
This software update adds the following registry subkey to support high-capacity SD memory cards:
A high-capacity SD memory card always returns the device size in blocks. A standard SD memory card always returns the device size in bytes. This difference has to be considered when the number of sectors on the card is calculated.
A high-capacity SD memory card includes only the block offset. However, the standard SD memory card includes the byte offset. Therefore, the start block on a high-capacity SD memory card is used during read operations and write operations.
if (!pMemCard->HighCapacity)
{
if (ULONG_MAX / SD_BLOCK_SIZE < StartBlock)
{
ASSERT(FALSE);
return ERROR_INVALID_PARAMETER;
}
StartBlock *= SD_BLOCK_SIZE;
}
Common issues
Buffer overflow
A high-capacity SD memory card supports up to 32 GB. Because a high-capacity SD memory card may use memory that is beyond the 32-bit address space, you must make sure that there is no buffer overflow. For example, when you try to read or write to a high-capacity SD memory card, make sure that you check the block size. To do this, use the following code:
if (ULONG_MAX / SD_BLOCK_SIZE < NumBlocks) { status = ERROR_INVALID_PARAMETER; }
Blocks or bytes
The SD bus may return the device size as blocks or as bytes. When a high-capacity SD memory card is used, the CSD register returns the device size in blocks for a high-capacity SD memory card. When a standard SD memory card is used, the CSD register returns the device size in bytes. Therefore, when a very small card is used, the buffer that stores the total sectors may overflow. In this situation, the number of sectors appears very large.