±à¼ÍƼö: |
±¾ÎÄÖ÷Òª¼òµ¥½éÉÜÁ˵¥Ôª²âÊÔ£¬ÊµÏÖÁËÒ»¸ö²âÊÔÓÃÀý£¬²¢ÇÒÈòâÊÔͨ¹ý¡£
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
±³¾°£º
ʵ¼ùµ¥Ôª²âÊÔÒ»¶Îʱ¼äÁË£¬¸Ð¾õÊ®·ÖÓÐÓ㬾ßÌåµ¥Ôª²âÊԵĺô¦£¬Õâ±ß²»ÃèÊö£¬µ¥Ôª²âÊԵĻù±¾¸ÅÄÕâÀïÒ²²»ÃèÊöÁË¡£±¾ÎÄÕÂÊǽéÉܵ¥Ôª²âÊÔÔÚǶÈëʽ¿ª·¢µÄÓ¦ÓᣠÎÒÕâ±ßʹÓõĵ¥Ôª²âÊÔ¿ò¼ÜÊÇ£ºUnity£¬Ò»¸öÇáÁ¿¼¶µÄµ¥Ôª²âÊÔ¿ò¼Ü£¬CÓïÑÔ±àд£¬·½±ãÒÆÖ²ºÍ²Ã¼ô¡£ UnityµÄÏà¹Ø×ÊÁÏÔ´Âë¿ÉÒÔ´ÓGithubÉÏÏÂÔØ£¬¿ªÔ´µÄ¡£µ¥Ôª²âÊÔµÄÓŵãÒ²¿ÉÒÔ´ÓCSDNÆäËü²©¿ÍÖÐÕÒµ½¡£ ±¾ÎÄ»áÒÔTDDΪָµ¼ÔÔò£¬ÏÈд²âÊÔÓÃÀý¶¨Òå±»²âº¯ÊýµÄ¹¦ÄÜ£¬ÔÙÔÚ±»²âº¯ÊýÖÐʵÏÖÕâ¸ö¹¦ÄÜ£¬È«²¿ÓÃCÓïÑÔʵÏÖ¡£
¼ò½é
´úÂë¼Ü¹¹½éÉÜ ½²½âÏÂÌí¼Óµ¥Ôª²âÊÔºóµÄ´úÂë½á¹¹£º
1. ´úÂë±È½Ï¼òµ¥£º

2. ϵͳ´æÔÚ¶à¸ö×Óϵͳ»òÕßÄ£¿éµÄ

µ¥Ôª²âÊÔµÄÔËÐУº
IDE
Ä¿±êÓ²¼þÉÏÔËÐÐ
LinuxÏÂÔËÐÐ
¿ªÊ¼ ÎÒeMMCÐÒéµÄCMD6´¦ÀíΪÀý×Ó£¬½¨Á¢µ¥Ôª²âÊÔµÄÏà¹Ø²âÊÔÓÃÀý£¬ÎªÊ²Ã´ÒªÓÃCMD6´¦Àíº¯ÊýΪ±»²âÊÔ¶ÔÏóÄØ£¬ÒòΪÎÒÕýÔÚд²âÊÔÓÃÀý¸²¸ÇÕâ¸öÄ£¿é¡£.Èç¹û²»Á˽âeMMCÐÒéµÄ£¬Ã»ÓйØÏµ£¬Âß¼Æäʵ²»¸´ÔÓ£¬ÏÂÃæ»áÒÔ¼òµ¥µÄ˵Ã÷È¥½éÉÜ¡£
Ê׸ö²âÊÔÓÃÀý
¸ù¾ÝÐÒéÃèÊö£¬Èç¹ûCMD6²Ù×÷ÁËEXTCSD192 - 255ÇøÓò£¬deviceÓ¦¸Ã²»×öÈκÎÐ޸쬲¢ÇÒÉèÖá°SWITCH_ERROR¡±×´Ì¬¡£
The Index field can contain any value from 0¨C255,
but only values 0¨C191 are valid values. If the Index
value is in 192-255 range the Device does not perform
any modification and the SWITCH_ERROR status bit is
set. ²âÊÔÓÃÀý¼ò½é£¬ CMD6²Ù×÷Æ«ÒÆÉèÖÃΪ192½øÐзÃÎÊ£¬argumentÊÇCMD6µÄ²ÎÊý£¬4BYTE£¬Ã¿¸öbyte´ú±í²»Í¬µÄº¬Ò壬ÆäÖÐ[16:23]Ö¸´æÈ¡µÄindex¡£
ÆäÖÐemmc_initial_status()Ϊ³õʼ»¯device
statusΪÕý³££¬emmc_get_status()ÊÇ»ñÈ¡deviceµ±Ç°µÄ״̬¡£
static void tst_cmd6_access_invalid_index
(void)
{
BYTE ret;
BYTE command_set = 0;
BYTE value = 0;
BYTE index = 0;
BYTE access_mode = 0;
UINT argument;
EXT_CSD extcsd;
emmc_initial_status(); // ³õʼ»¯device statusΪnormal
status
index = 192;
argument = ((UINT)access_mode << 24) | ((UINT)index
<< 16) | ((UINT)value << 8) | command_set;
ret = emmc_cmd6 (argument, &extcsd);
TEST_ASSERT_EQUAL_INT8 (FALSE, ret); // ±»²âº¯Êý¼ì²âµ½Òì³££¬·µ»Øfalse
TEST_ASSERT_EQUAL_INT8 (SWITCH_ERROR, emmc_get_status());
}
|
±»²âº¯ÊýÈçÏ£º
BYTE emmc_cmd6
(UINT argument, EXT_CSD *pextcsd)
{
return TRUE;
} |
°Ñ²âÊÔÓÃÀýÌí¼Óµ½²âÊÔÌ×¼þÖУº
int tstSuite_cmd6(void)
{
UNIT_regSetupFunc(Setup);
UNIT_regTeardownFunc (TearDown);
UnityBegin(__FILE__);
RUN_TEST (tst_cmd6_access_invalid_index);
UNIT_regSetupFunc(NULL);
UNIT_regTeardownFunc(NULL);
return UnityEnd(); |
ÔËÐвâÊÔ£¬²¢ÇÒÊä³ö½á¹û£º
>>>>
..\unittest\ts_cmd6\tsuite_cmd6.c:87 :tst_cmd6_access_invalid_index:FAIL:
Expected 0 Was 1
1 Tests 1 Failures 0 Ignored
FAIL
|
OK£¬½á¹û¿Ï¶¨ÊÇfailµÄ¡£ÎÒÃÇÐ޸ı»²â´úÂëÒÔÈòâÊÔ¿ÉÒÔpass£¬ÐÞ¸ÄÄÚÈÝ£ºÔÚ¼ì²âµ½Ò쳣ʱ·µ»ØFALSE£¬²¢ÇÒÔÚindex
>= 192ʱÉèÖÃdevice statusΪSWITCH_ERROR¡±£¬Ð޸Ĺý³ÌÂÔ...Ð޸ĺóÈçÏÂ
BYTE emmc_cmd6(UINT
argument, EXT_CSD *pextcsd)
{
BYTE index = (BYTE)(argument >> 16);
if (index >= 192)
{
emmc_set_status(SWITCH_ERROR);
return FALSE;
}
return TRUE;
}
|
²âÊÔͨ¹ý£¬Êä³ö½çÃæÈçÏ£º
>>>>
..\..\..\unitTest\ts_cmd6\tSuite_cmd6.c: 126:tst_cmd6_access_invalid_index :PASS
1 Tests 0 Failures 0 Ignored
OK |
|