久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1608|回復: 13
收起左側(cè)

W25Q32存儲數(shù)據(jù)時,上位機串口通信異常怎么解決?

[復制鏈接]
回帖獎勵 10 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次
ID:1104941 發(fā)表于 2024-2-29 19:00 | 顯示全部樓層 |閱讀模式
每次往25Q32存儲256字節(jié)數(shù)據(jù),看手冊貌似要200MS(擦除時間久),這是時間上位機有命令來的話,執(zhí)行串口中斷,會有通信異常。

回復

使用道具 舉報

ID:1111855 發(fā)表于 2024-2-29 20:23 | 顯示全部樓層
數(shù)據(jù)發(fā)送中間歇性數(shù)據(jù)異常漏發(fā)亂發(fā)
回復

使用道具 舉報

ID:458247 發(fā)表于 2024-3-1 08:43 | 顯示全部樓層
1、如果單片機有dma功能,則用dma接收串口數(shù)據(jù)
2、25Q32看能不能用狀態(tài)機編程,刪除指令發(fā)出后不死等,等到下次執(zhí)行時判斷有沒有擦除成功,若擦除成功了再進行寫操作
3、25Q32的刪除操作看看能不能在程序初始化的時候就做好
回復

使用道具 舉報

ID:370824 發(fā)表于 2024-3-1 08:45 | 顯示全部樓層
1. 200ms擦除時間不需要mcu一直干預,執(zhí)行完擦除指令,就退出來。2. 通訊采用中斷模式,若硬件有獨立自緩存區(qū)可以使用查詢模式,不會影響與上位機通訊。
回復

使用道具 舉報

ID:636806 發(fā)表于 2024-3-1 10:19 | 顯示全部樓層
1、提前擦除扇區(qū);2、實在避免不了擦除的時間,就先將數(shù)據(jù)緩存下來,擦除完成后再將緩存數(shù)據(jù)寫入
回復

使用道具 舉報

ID:1104941 發(fā)表于 2024-3-1 14:01 | 顯示全部樓層
臭獅子 發(fā)表于 2024-3-1 10:19
1、提前擦除扇區(qū);2、實在避免不了擦除的時間,就先將數(shù)據(jù)緩存下來,擦除完成后再將緩存數(shù)據(jù)寫入

好的,目前參照這個做著
回復

使用道具 舉報

ID:1104941 發(fā)表于 2024-3-1 14:03 | 顯示全部樓層
yzw846562238 發(fā)表于 2024-3-1 08:43
1、如果單片機有dma功能,則用dma接收串口數(shù)據(jù)
2、25Q32看能不能用狀態(tài)機編程,刪除指令發(fā)出后不死等,等 ...

受教了,因為收到串口命令有涉及計算操作,感覺DMA不能用。狀態(tài)機編程我看下好不好實現(xiàn)
回復

使用道具 舉報

ID:1111904 發(fā)表于 2024-3-1 14:04 | 顯示全部樓層
執(zhí)行完擦除指令后,讀取狀態(tài)寄存器,判斷是否擦除完成,然后再進行寫入數(shù)據(jù)
回復

使用道具 舉報

ID:1104941 發(fā)表于 2024-3-1 14:09 | 顯示全部樓層
JACKRENYONG 發(fā)表于 2024-3-1 08:45
1. 200ms擦除時間不需要mcu一直干預,執(zhí)行完擦除指令,就退出來。2. 通訊采用中斷模式,若硬件有獨立自緩存 ...

/**
  * @brief  等待WIP(BUSY)標志被置0,即等待到FLASH內(nèi)部數(shù)據(jù)寫入完畢
  * @param  none
  * @retval none
  */
void SPI_FLASH_WaitForWriteEnd(void)
{
  u8 FLASH_Status = 0;

  /* 選擇 FLASH: CS 低 */
  SPI_FLASH_CS_LOW();

  /* 發(fā)送 讀狀態(tài)寄存器 命令 */
  SPI_FLASH_SendByte(W25X_ReadStatusReg);

  /* 若FLASH忙碌,則等待 */
  do
  {
                /* 讀取FLASH芯片的狀態(tài)寄存器 */
    FLASH_Status = SPI_FLASH_SendByte(Dummy_Byte);         
  }
  while ((FLASH_Status & WIP_Flag) == SET);  /* 正在寫入標志 */

  /* 停止信號  FLASH: CS 高 */
  SPI_FLASH_CS_HIGH();
}
這個是我25Q32擦除后等待擦除完畢的函數(shù),沒有試過不等待直接退出的。我測試一下。
采用中斷的話,我擔心正在寫入數(shù)據(jù)時,串口中斷來了,寫進去的數(shù)據(jù)異常。
回復

使用道具 舉報

ID:401564 發(fā)表于 2024-3-1 15:42 | 顯示全部樓層
這個實際上是你程序的問題,就算是死等,中斷也不全影響到W25Q32的寫入的,它對最慢時鐘是沒有要求的,一秒鐘一個時鐘都可以
這可能是你中斷中有改變W25Q32的操作,這才會影響到的
回復

使用道具 舉報

ID:1104941 發(fā)表于 2024-3-2 09:29 | 顯示全部樓層
Y_G_G 發(fā)表于 2024-3-1 15:42
這個實際上是你程序的問題,就算是死等,中斷也不全影響到W25Q32的寫入的,它對最慢時鐘是沒有要求的,一秒鐘一 ...

謝謝你的解疑,可以請教一下嗎?
1.W25Q32在寫過程中,來了中斷會影響保存的數(shù)據(jù)嗎?(中斷沒有操作25Q32)
2.目前中斷確實有操作25Q32的代碼,主循環(huán)每隔一段時間存儲數(shù)據(jù),串口中斷收到對應命令,有操作25Q32。
目前是先等操作完再回應上位機,我擔心不在中斷中操作25Q32,先回應上位機再操作25Q32的話,馬上又有中斷來,還是會影響。
回復

使用道具 舉報

ID:401564 發(fā)表于 2024-3-2 11:47 | 顯示全部樓層
bstljq 發(fā)表于 2024-3-2 09:29
謝謝你的解疑,可以請教一下嗎?
1.W25Q32在寫過程中,來了中斷會影響保存的數(shù)據(jù)嗎?(中斷沒有操作25Q3 ...

1,中斷不會影響W25Q32的操作,不管是時鐘低電平時觸發(fā)中斷還是字節(jié)只寫了一半,中斷都不會影響的
2,如果是中斷中要有對W25Q32的操作,正確的作法是設置一個標志位,每次中斷只觸發(fā)標志位,但不能直接對W25Q32進行操作
在主函數(shù)中檢測標志位,等到上一次W25Q32操作完成之后,再進行操作,在子函數(shù)中清除標志位
上位機操作一般就是這樣的,單片機檢測到上位機的命令之后,不直接操作的,先標志一個標志位,再在主函數(shù)中檢測標志位,然后在對應的函數(shù)中清除標志位
回復

使用道具 舉報

ID:1104941 發(fā)表于 2024-3-2 18:58 | 顯示全部樓層
Y_G_G 發(fā)表于 2024-3-2 11:47
1,中斷不會影響W25Q32的操作,不管是時鐘低電平時觸發(fā)中斷還是字節(jié)只寫了一半,中斷都不會影響的
2,如果是 ...

謝謝了,按照你的思路有改善。
目前有個難以理解的問題,我現(xiàn)在是在25Q32取出一片區(qū)域,這個區(qū)域分成N塊,每塊寫入256字節(jié)。每次寫之前讀取該塊的前8個字節(jié),計算8字節(jié)累加和判斷是不是0XFF來確認是否已經(jīng)擦除了。
現(xiàn)在的現(xiàn)象是,如果是上電使用整片擦除,后續(xù)存儲數(shù)據(jù)讀出來的8字節(jié)都沒問題,驗證都通過。
如果我是在單個扇區(qū)擦除,然后讀出8字節(jié),就會檢驗失敗。一個扇區(qū)里面有16個256字節(jié)的數(shù)據(jù)塊,起碼2個以上都是校驗失敗的,其他的的校驗成功。
扇區(qū)擦除加了讀BUSY狀態(tài)等待,而且后續(xù)還加了50MS軟件延遲,還是會出現(xiàn)問題。
回復

使用道具 舉報

ID:1104941 發(fā)表于 2024-3-2 18:59 | 顯示全部樓層
Y_G_G 發(fā)表于 2024-3-2 11:47
1,中斷不會影響W25Q32的操作,不管是時鐘低電平時觸發(fā)中斷還是字節(jié)只寫了一半,中斷都不會影響的
2,如果是 ...

/**
  * @brief  擦除FLASH扇區(qū)
  * @param  SectorAddr:要擦除的扇區(qū)地址[24位地址,但是芯片會忽略掉低12位地址]
  * @retval 無
  */
void SPI_FLASH_SectorErase(u32 SectorAddr)
{
//        #ifdef DEBUG_PRINTF
//        printf("erase addr %x\r\n",SectorAddr);
//        #endif
  /* 發(fā)送FLASH寫使能命令 */
  SPI_FLASH_WriteEnable();
  SPI_FLASH_WaitForWriteEnd();
  /* 擦除扇區(qū) */
  /* 選擇FLASH: CS低電平 */
  SPI_FLASH_CS_LOW();
  /* 發(fā)送扇區(qū)擦除指令*/
  SPI_FLASH_SendByte(W25X_SectorErase);
  /*發(fā)送擦除扇區(qū)地址的高位*/
  SPI_FLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
  /* 發(fā)送擦除扇區(qū)地址的中位 */
  SPI_FLASH_SendByte((SectorAddr & 0xFF00) >> 8);
  /* 發(fā)送擦除扇區(qū)地址的低位 */
  SPI_FLASH_SendByte(SectorAddr & 0xFF);
  /* 停止信號 FLASH: CS 高電平 */
  SPI_FLASH_CS_HIGH();
  /* 等待擦除完畢*/
  SPI_FLASH_WaitForWriteEnd();
}

/**
  * @brief  擦除FLASH扇區(qū),整片擦除
        * 描述  :25Q32擦除一次要7-8秒
  * @param  無
  * @retval 無
  */
void SPI_FLASH_BulkErase(void)
{
  /* 發(fā)送FLASH寫使能命令 */
  SPI_FLASH_WriteEnable();

  /* 整塊 Erase */
  /* 選擇FLASH: CS低電平 */
  SPI_FLASH_CS_LOW();
  /* 發(fā)送整塊擦除指令*/
  SPI_FLASH_SendByte(W25X_ChipErase);
  /* 停止信號 FLASH: CS 高電平 */
  SPI_FLASH_CS_HIGH();

  /* 等待擦除完畢*/
  SPI_FLASH_WaitForWriteEnd();
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一区二区在线观看 | 亚洲精品短视频 | 求毛片 | 成人在线播放 | 麻豆hd| 成人精品一区二区 | 国产激情在线 | 中文字幕免费视频 | 伊人狠狠干 | 91国内视频在线 | 国产三级国产精品 | 色婷婷九月 | 91精品国产91 | 波多野结衣精品在线 | 国产精品久久久久久久久免费相片 | 国产日韩欧美二区 | 国产精品欧美日韩 | 精品国产一区二区三区久久影院 | 在线免费观看黄色网址 | av片在线观看 | 7777精品伊人久久精品影视 | 久久中文免费视频 | 欧美a级成人淫片免费看 | 国产高清精品在线 | 天堂视频中文在线 | 日韩一区二区在线观看视频 | 国产精品久久久久久久久久免费看 | 日韩免费一区 | 成人精品一区二区三区四区 | 在线视频国产一区 | 亚洲视频在线观看一区二区三区 | 国产精品日韩欧美一区二区三区 | 日韩三级精品 | 日本不卡在线视频 | 一区欧美 | 丁香五月缴情综合网 | 国产一区二区免费 | 国产精品18毛片一区二区 | h视频网站在线观看 | 亚洲精品美女视频 | 中国一级特黄真人毛片 |