賽普拉斯的PSoC微控制器易于使用、靈活并具有一系列經(jīng)濟(jì)高效的可重新編程的模擬和數(shù)字資源。通過(guò)這些特性可以實(shí)現(xiàn)各種創(chuàng)意設(shè)計(jì),例如使用板上主機(jī)處理器對(duì)PSoC進(jìn)行串行編程。此方法用于現(xiàn)場(chǎng)安裝或更新固件,甚至對(duì)PSoC完全重新編程,以實(shí)現(xiàn)其他功能。
HSSP代碼示例由賽普拉斯創(chuàng)建,旨在幫助系統(tǒng)設(shè)計(jì)人員開(kāi)始創(chuàng)建自己的串行編程軟件。設(shè)計(jì)人員必須最大限度地減少對(duì)該代碼的修改,以保證其與特定的主機(jī)編程器兼容。該代碼示例僅涵蓋CY8C20xx6A系列的PSoC器件,具有高度抽象性。有關(guān)串行編程的更多信息,請(qǐng)參閱ISSP編程規(guī)范。本文概括介紹了實(shí)現(xiàn)方法。協(xié)議詳細(xì)信息和各個(gè)矢量的含義是專有信息,本文故意省略了這些內(nèi)容。
概述
PSoC器件可通過(guò)兩種不同的模式進(jìn)行編程:復(fù)位模式和重啟模式。復(fù)位模式是首選編程模式,僅在系統(tǒng)采用外部供電時(shí)使用。在這種情況下,目標(biāo)PSoC上的XRES引腳將于流程結(jié)束時(shí)切換,使其跳出編程模式,并恢復(fù)正常操作。在重啟模式下,主機(jī)微處理器將切換PSoC電源的開(kāi)關(guān)。
在兩種編程模式下,主機(jī)均需要三個(gè)I/O引腳。在復(fù)位模式下分別為串行數(shù)據(jù)(SDATA)、串行時(shí)鐘(SCLK)和外部復(fù)位(XRES)引腳,在電源循環(huán)模式下則為SDATA、SCLK和PSoC電源(PWR)引腳。這些引腳通過(guò)軟件控制。
主機(jī)處理器上的SDATA引腳必須為雙向引腳。主機(jī)必須能夠更改該引腳的屬性,以便用其向PSoC發(fā)出信號(hào)、將其釋放到High Z狀態(tài),以及從該引腳讀取信號(hào)。
屬性選擇
設(shè)計(jì)人員必須設(shè)置以下兩個(gè)屬性:標(biāo)簽和說(shuō)明。要進(jìn)行此設(shè)置,可以對(duì)ISSP_DIRECTIVES.H文件中的某些#define進(jìn)行注釋或取消注釋。這些#define標(biāo)有“User Attention Required”(用戶需要注意)標(biāo)簽,非常明顯,很容易找到。您還可以進(jìn)行頁(yè)面搜索,查找單個(gè)標(biāo)簽。每個(gè)屬性的說(shuō)明及其標(biāo)簽將列于屬性下方:
屬性:編程模式
標(biāo)簽:PROGRAMMING MODE(編程模式)
說(shuō)明:如果采用的是重啟模式,則應(yīng)對(duì)該#define進(jìn)行注釋。如果采用的是復(fù)位模式,則應(yīng)取消注釋該#define語(yǔ)句。
屬性:目標(biāo)PSoC器件
標(biāo)簽:TARGET?PSOC(目標(biāo)PSOC)
說(shuō)明:在此部分中選擇目標(biāo)CY8C20xx6A PSoC。在任何給定情況下,均只能啟用一個(gè)器件,所有其他的器件均應(yīng)注釋掉。低層驅(qū)動(dòng)程序修改。
設(shè)計(jì)人員根據(jù)主機(jī)特定代碼,以操作在對(duì)目標(biāo)PSoC進(jìn)行編程時(shí)所涉及的引腳。這些API可以在ISSP_DRIVER_ROUTINES.C找到,并標(biāo)有“Processor Specific”(特定處理器)和“User Attention Required”(用戶需要注意)。
■端口位掩碼:對(duì)于使用的特定主機(jī)處理器,必須調(diào)整四個(gè)端口位掩碼。請(qǐng)注意,雖然要設(shè)置四個(gè)位,但根據(jù)所用的編程方法,只需在編程過(guò)程中用到以下三個(gè)位——復(fù)位模式下為SDATA、SCLK和XRES;電源循環(huán)模式下為SDATA、SCLK和PWR。
■Delay(n)函數(shù):調(diào)整此函數(shù),使while循環(huán)的每次迭代均保持至少1μs。循環(huán)時(shí)間通常沒(méi)有上限。但是,循環(huán)時(shí)間越長(zhǎng),對(duì)目標(biāo)的編程時(shí)間就越長(zhǎng)。例如,如果主機(jī)微處理器也是PSoC,每次迭代約為1μs,開(kāi)銷為3μs。因此,該函數(shù)將產(chǎn)生n+3μs的延遲,其中n是傳遞給該函數(shù)的參數(shù)。要調(diào)整主機(jī)處理器的延遲時(shí)間,請(qǐng)修改ISSP_DELAYS.H中的#define。
■端口位操作函數(shù):這些函數(shù)將控制主機(jī)引腳,以產(chǎn)生PSoC編程所需的信號(hào)。它們可以驅(qū)動(dòng)引腳輸出高低電平,也可以將引腳釋放至High Z狀態(tài)。以下列出了這些函數(shù)。大部分函數(shù)的用途不言自明,但在代碼中均有記錄。附錄中也提供了說(shuō)明。
向RAM緩沖區(qū)中加載數(shù)據(jù)
HSSP代碼將按順序從128字節(jié)緩沖區(qū)取出數(shù)據(jù),以進(jìn)行PSoC閃存區(qū)塊編程。此過(guò)程從最低區(qū)塊地址開(kāi)始。對(duì)第一個(gè)區(qū)塊進(jìn)行編程后,同一個(gè)緩沖區(qū)將用于對(duì)后續(xù)閃存區(qū)塊進(jìn)行編程。
設(shè)計(jì)人員必須根據(jù)數(shù)據(jù)來(lái)源(USB、RS-232、SD卡等)編寫(xiě)代碼,以填充該緩沖區(qū)。對(duì)于所用的特定主機(jī)處理器,應(yīng)編寫(xiě)以下兩個(gè)函數(shù):LoadProgramData()和fLoadSecurityData()。這些函數(shù)可以在ISSP_DRIVER_ROUTINES.C中找到,并標(biāo)有“Processor Specific”(特定處理器)和“User Attention Required”(用戶需要注意)。這些函數(shù)在原始狀態(tài)下,會(huì)調(diào)用兩個(gè)輔助函數(shù),向緩沖區(qū)加載偽測(cè)試數(shù)據(jù),以進(jìn)行調(diào)試。在最終版本中,請(qǐng)刪除或注釋掉這些調(diào)用語(yǔ)句。
修改閃存區(qū)塊順序或數(shù)量
在某些情況下,必須對(duì)閃存中的特定區(qū)域進(jìn)行編程。例如專用于存儲(chǔ)特征、校準(zhǔn)或固件現(xiàn)場(chǎng)升級(jí)的區(qū)域。這些特性通常通過(guò)EEPROM用戶模塊實(shí)現(xiàn)。但是,在某些情形下,如果代碼空間受限,則可以在PSoC中直接編寫(xiě)這些特性,以節(jié)省代碼空間。
您可以更改目標(biāo)區(qū)塊的起始地址,以及區(qū)塊的編程順序。上述操作不會(huì)產(chǎn)生任何問(wèn)題,因?yàn)槊總€(gè)編程順序均包含區(qū)塊地址。但是,請(qǐng)記住以下幾點(diǎn):
■如果修改了編程循環(huán),則必須對(duì)驗(yàn)證循環(huán)應(yīng)用相同的變更,否則驗(yàn)證將會(huì)失敗。
■代碼在運(yùn)行過(guò)程中會(huì)累加校驗(yàn)和,并根據(jù)截至當(dāng)時(shí)的整個(gè)閃存檢查校驗(yàn)和。如果您僅對(duì)閃存的某個(gè)區(qū)域進(jìn)行編程,則應(yīng)相應(yīng)地設(shè)置變量iChecksumData。
利用內(nèi)置測(cè)試點(diǎn)進(jìn)行驗(yàn)證
要成功實(shí)現(xiàn)主機(jī)源編程,最關(guān)鍵因素之一是獲取正確的擦除和寫(xiě)入脈沖寬度。為幫助您完成此過(guò)程,在程序的重要位置實(shí)現(xiàn)了幾個(gè)測(cè)試點(diǎn)(TP)調(diào)用。要啟用此調(diào)試模式,在ISSP_DRIVER_SOUTINES.H中取消對(duì)USE_TP #ifdef的注釋。有幾個(gè)函數(shù)與調(diào)試模式相關(guān),它們與本文之前提及的引腳操作函數(shù)相似。系統(tǒng)設(shè)計(jì)人員必須提供主機(jī)特定代碼,以驅(qū)動(dòng)引腳輸出高電平、低電平,或切換引腳。
正確的調(diào)試過(guò)程需要監(jiān)控TP和SDATA線,且必須測(cè)量擦除和編程脈沖。實(shí)現(xiàn)此目的的最佳方式是使用雙蹤示波器,并在TP通道的上升沿進(jìn)行觸發(fā),使其進(jìn)入單序列模式。
擦除脈沖寬度從數(shù)據(jù)突發(fā)的末端開(kāi)始測(cè)量,到TP下降沿結(jié)束,如圖1所示。請(qǐng)注意,TP上升沿與數(shù)據(jù)突發(fā)末端不在一條線上。但是由于TP引腳被驅(qū)高的時(shí)刻與主機(jī)開(kāi)始發(fā)出數(shù)據(jù)的時(shí)刻之間存在延遲開(kāi)銷,因此,TP上升沿預(yù)計(jì)會(huì)排成一條線。
圖1.測(cè)量擦除脈沖寬度
編程脈沖寬度亦是從數(shù)據(jù)突發(fā)的末端開(kāi)始測(cè)量,到TP下降結(jié)束。圖2顯示編程脈沖寬度測(cè)量。與擦除脈沖寬度一樣,TP信號(hào)的上升沿與數(shù)據(jù)突發(fā)的末端也不在一條線上。
圖2.測(cè)量寫(xiě)入脈沖寬度
表1匯總了各種PSoC器件的理想擦除和寫(xiě)入脈沖寬度。測(cè)量值必須在理想值-3%到+15%的范圍內(nèi)。無(wú)法滿足該要求將導(dǎo)致錯(cuò)誤編程,并產(chǎn)生不利影響,例如比指定規(guī)范更短的閃存數(shù)據(jù)保留時(shí)間,以及比預(yù)期更少的閃存擦除和寫(xiě)入循環(huán)。
表1.CY8C20xx6A?PSoC的擦除和寫(xiě)入脈沖寬度
限制
main.c開(kāi)頭部分的注釋包含有用的重要信息,系統(tǒng)設(shè)計(jì)人員應(yīng)仔細(xì)考量。這些注釋對(duì)HSSP代碼的某些限制進(jìn)行了說(shuō)明;不過(guò),以下是簡(jiǎn)短摘要。
■串行編程只能在5℃和50℃的溫度范圍內(nèi)進(jìn)行。
■HSSP程序不支持1.8V以下的電壓。
■編程過(guò)程僅在一個(gè)電壓范圍內(nèi)完成。如果器件初始電壓為5.0V,則整個(gè)過(guò)程必須在5.0V范圍內(nèi)完成。
■SCLK的頻率存在上限。器件數(shù)據(jù)手冊(cè)的“交流電編程規(guī)范”部分指定了該頻率,以符號(hào)FSCLK標(biāo)出
評(píng)論
查看更多