找回密码
 立即注册
收起左侧

请问有对flash参数设置这一块比较熟悉的吗?

2
回复
6662
查看
[复制链接]
累计签到:14 天
连续签到:1 天
来源: 2016-3-4 15:16:06 显示全部楼层 |阅读模式
1Qter豆
看别人做的一个工具其中的一个功能是对flash的擦写,或将数据下载到flash上面,工具的源码里面有一段关于flash参数设置的代码,不太懂

SN_LIST g_PSNList;SN_LIST g_MBSNList;DOWNLOAD_PARAMS            g_downloadParams;int                        g_iPSNlen,g_iMBSNlen;QVector<FLASH_TYPE_PARAMS> g_flashList;QVector<LCD_ID>            g_lcdList;bool             m_bThreadStopped[16];CRITICAL_SECTION mbsn_critSection;CRITICAL_SECTION phsn_critSection;bool            g_bCfpFile;bool            g_bEraseFact;bool            g_bEraseCalib;bool            g_bManualFlash;bool            g_bLod8809;bool            g_bChecksumOk;bool            g_bNoRamrun, g_bNoLod, g_bNoCfp, g_bNoErase;Lod_to_packet   g_comm_lodpacket;DWORD           g_dwUID[16];extern bool bCN ;extern bool GetFlashInfoFromLodfile(QString strLodName);bool setFlashParams(QString strFlashType){        bool bOK;        int  numFlash    = 0;        int  index       = 0;        numFlash = g_flashList.size();        for( index=0; index < numFlash; index++)        {                if(strFlashType == g_flashList[index].strFlashType)                {                        DWORD dwFactAddr,dwFactSize,dwCalibAddr,dwCalibSize;                        dwFactAddr  = g_flashList[index].strFactSectorAddress.toLong(&bOK,16);                        dwFactSize  = g_flashList[index].strFactSectorSize.toLong(&bOK,16);                        dwCalibAddr = g_flashList[index].strCalibSectorAddress.toLong(&bOK,16);                        dwCalibSize = g_flashList[index].strCalibSectorSize.toLong(&bOK,16);                        g_downloadParams.dwFactSectorAddress    = (dwFactAddr  & 0x00ffffff) | g_downloadParams.dwBaseAddress;                        g_downloadParams.dwFactSectorSize       =  dwFactSize;                        g_downloadParams.dwCalibSectorAddress   = (dwCalibAddr & 0x00ffffff) | g_downloadParams.dwBaseAddress;                        g_downloadParams.dwCalibSectorSize      =  dwCalibSize;                        g_downloadParams.strEraseCalibPath        = ERASE_PATH + g_flashList[index].strEraseCalibPath;                        g_downloadParams.strEraseFactPath        = ERASE_PATH + g_flashList[index].strEraseFactPath;                        g_downloadParams.strEraseUsrPath        = ERASE_PATH + g_flashList[index].strEraseUsrPath;                        g_downloadParams.strEraseAllPath        = ERASE_PATH + g_flashList[index].strEraseAllPath;                        g_downloadParams.strHstProgramerPath= RAMRUN_PATH  + g_flashList[index].strHstFlashProgrammer;                        break;                }        }        if(index==numFlash)        {                QMessageBox::critical(0, QObject::tr("Error"), QObject::tr("The flash you had selected was not existed in our flash list"), QMessageBox::Ok);                return FALSE;        }                return TRUE;}

回复

使用道具 举报

累计签到:14 天
连续签到:1 天
2016-3-4 15:17:22 显示全部楼层
本帖最后由 malouqizu 于 2016-3-4 15:18 编辑

SN_LIST g_PSNList;
SN_LIST g_MBSNList;

DOWNLOAD_PARAMS            g_downloadParams;
int                        g_iPSNlen,g_iMBSNlen;
QVector<FLASH_TYPE_PARAMS> g_flashList;
QVector<LCD_ID>            g_lcdList;

bool             m_bThreadStopped[16];
CRITICAL_SECTION mbsn_critSection;
CRITICAL_SECTION phsn_critSection;

bool            g_bCfpFile;
bool            g_bEraseFact;
bool            g_bEraseCalib;
bool            g_bManualFlash;

bool            g_bLod8809;
bool            g_bChecksumOk;
bool            g_bNoRamrun, g_bNoLod, g_bNoCfp, g_bNoErase;
Lod_to_packet   g_comm_lodpacket;

DWORD           g_dwUID[16];

extern bool bCN ;
extern bool GetFlashInfoFromLodfile(QString strLodName);

bool setFlashParams(QString strFlashType)
{
        bool bOK;
        int  numFlash    = 0;
        int  index       = 0;

        numFlash = g_flashList.size();
        for( index=0; index < numFlash; index++)
        {
                if(strFlashType == g_flashList[index].strFlashType)
                {
                        DWORD dwFactAddr,dwFactSize,dwCalibAddr,dwCalibSize;

                        dwFactAddr  = g_flashList[index].strFactSectorAddress.toLong(&bOK,16);
                        dwFactSize  = g_flashList[index].strFactSectorSize.toLong(&bOK,16);
                        dwCalibAddr = g_flashList[index].strCalibSectorAddress.toLong(&bOK,16);
                        dwCalibSize = g_flashList[index].strCalibSectorSize.toLong(&bOK,16);

                        g_downloadParams.dwFactSectorAddress    = (dwFactAddr  & 0x00ffffff) | g_downloadParams.dwBaseAddress;
                        g_downloadParams.dwFactSectorSize       =  dwFactSize;
                        g_downloadParams.dwCalibSectorAddress   = (dwCalibAddr & 0x00ffffff) | g_downloadParams.dwBaseAddress;
                        g_downloadParams.dwCalibSectorSize      =  dwCalibSize;

                        g_downloadParams.strEraseCalibPath        = ERASE_PATH + g_flashList[index].strEraseCalibPath;
                        g_downloadParams.strEraseFactPath        = ERASE_PATH + g_flashList[index].strEraseFactPath;
                        g_downloadParams.strEraseUsrPath        = ERASE_PATH + g_flashList[index].strEraseUsrPath;
                        g_downloadParams.strEraseAllPath        = ERASE_PATH + g_flashList[index].strEraseAllPath;

                        g_downloadParams.strHstProgramerPath= RAMRUN_PATH  + g_flashList[index].strHstFlashProgrammer;

                        break;
                }
        }

        if(index==numFlash)
        {
                QMessageBox::critical(0, QObject::tr("Error"), QObject::tr("The flash you had selected was not existed in our flash list"), QMessageBox::Ok);
                return FALSE;
        }        

        return TRUE;
}
回复

使用道具 举报

累计签到:11 天
连续签到:1 天
2016-3-5 09:41:50 显示全部楼层
找到相应的flash芯片数据手册看一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了