{"id":3563,"date":"2025-04-19T18:49:22","date_gmt":"2025-04-19T10:49:22","guid":{"rendered":"https:\/\/saludpcb.com\/zh\/?p=3563"},"modified":"2025-09-26T06:15:43","modified_gmt":"2025-09-25T22:15:43","slug":"esp32-spi-dma","status":"publish","type":"post","link":"https:\/\/saludpcb.com\/zh\/esp32-spi-dma\/","title":{"rendered":"\u6df1\u5ea6\u89e3\u5bc6 ESP32 SPI DMA \u67b6\u69cb\uff5c\u5be6\u73fe\u96f6\u7b49\u5f85\u6578\u64da\u50b3\u8f38"},"content":{"rendered":"\n<hr class=\"wp-block-separator alignwide has-text-color has-palette-color-1-color has-alpha-channel-opacity has-palette-color-1-background-color has-background is-style-wide\"\/>\n\n\n\n<p>\u5728\u73fe\u4ee3\u5d4c\u5165\u5f0f\u7cfb\u7d71\u958b\u767c\u4e2d\uff0c\u9ad8\u6548\u7684\u5916\u8a2d\u901a\u4fe1\u662f\u5be6\u73fe\u9ad8\u6027\u80fd\u61c9\u7528\u7684\u95dc\u9375\u3002ESP32 \u4f5c\u70ba\u4e00\u6b3e\u529f\u80fd\u5f37\u5927\u7684 WiFi\/\u85cd\u7259\u96d9\u6a21\u82af\u7247\uff0c\u5176 SPI \u63a5\u53e3\u914d\u5408 DMA (\u76f4\u63a5\u8a18\u61b6\u9ad4\u5b58\u53d6) \u6280\u8853\u53ef\u4ee5\u5be6\u73fe\u9ad8\u901f\u6578\u64da\u50b3\u8f38\u800c\u4e0d\u4f54\u7528 CPU \u8cc7\u6e90\u3002\u672c\u6587\u5c07\u8a73\u7d30\u4ecb\u7d39\u5982\u4f55\u5728 VSCode \u958b\u767c\u74b0\u5883\u4e0b\uff0c\u4f7f\u7528 ESP-IDF \u6846\u67b6\u914d\u7f6e SPI \u8207 DMA \u9032\u884c\u9ad8\u6548\u6578\u64da\u50b3\u8f38\u7684\u5168\u904e\u7a0b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/saludpcb.com\/zh\/wp-content\/uploads\/2025\/04\/How-ESP32s-SPI-DMA-Hijacks-SPI-for-Insane-Speed-Boosts.jpg\" alt=\"SPI DMA\" class=\"wp-image-3568\" title=\"\" srcset=\"https:\/\/saludpcb.com\/zh\/wp-content\/uploads\/2025\/04\/How-ESP32s-SPI-DMA-Hijacks-SPI-for-Insane-Speed-Boosts.jpg 1792w, https:\/\/saludpcb.com\/zh\/wp-content\/uploads\/2025\/04\/How-ESP32s-SPI-DMA-Hijacks-SPI-for-Insane-Speed-Boosts-768x439.jpg 768w, https:\/\/saludpcb.com\/zh\/wp-content\/uploads\/2025\/04\/How-ESP32s-SPI-DMA-Hijacks-SPI-for-Insane-Speed-Boosts-1536x878.jpg 1536w\" sizes=\"auto, (max-width: 1792px) 100vw, 1792px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>\u5167\u5bb9<\/h2><nav><ul><li class=\"\"><a href=\"#\u4ec0\u9ebc\u662f-modbus\uff1f\">\u4ec0\u9ebc\u662f SPI DMA\uff1f<\/a><\/li><li class=\"\"><a href=\"#pwm-\u8207\u547c\u5438\u71c8\u539f\u7406\u5feb\u901f\u7406\u89e3\">\u539f\u7406\u5feb\u901f\u7406\u89e3<\/a><\/li><li class=\"\"><a href=\"#\u74b0\">\u958b\u767c\u74b0\u5883<\/a><\/li><li class=\"\"><a href=\"#\u5c08\u6848\u7d50\u69cb\">\u5c08\u6848\u7d50\u69cb<\/a><\/li><li class=\"\"><a href=\"#\u4f7f\u7528-esp-idf-\u64b0\u5beb\u547c\u5438\u71c8\u63a7\u5236\u7a0b\u5f0f\">\u7a0b\u5f0f\u78bc<\/a><\/li><li class=\"\"><a href=\"#\u7de8\u8b6f\u548c\u71d2\u9304\">\u7a0b\u5f0f\u78bc\u89e3\u8aaa<\/a><\/li><li class=\"\"><a href=\"#\u7de8\u8b6f\u548c\u71d2\u9304-1\">\u7de8\u8b6f\u548c\u71d2\u9304<\/a><\/li><li class=\"\"><a href=\"#\u7d50\u8ad6\">\u7d50\u8ad6<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u4ec0\u9ebc\u662f-modbus\uff1f\">\u4ec0\u9ebc\u662f SPI DMA\uff1f<\/h2>\n\n\n\n<p><strong>SPI (Serial Peripheral Interface)<\/strong>&nbsp;\u662f\u4e00\u7a2e\u540c\u6b65\u4e32\u884c\u901a\u4fe1\u63a5\u53e3\uff0c\u5ee3\u6cdb\u7528\u65bc\u5fae\u63a7\u5236\u5668\u8207\u5916\u8a2d\u4e4b\u9593\u7684\u77ed\u8ddd\u96e2\u901a\u4fe1\u3002<\/p>\n\n\n\n<p><strong>DMA (Direct Memory Access)<\/strong>&nbsp;\u662f\u4e00\u7a2e\u5141\u8a31\u5916\u8a2d\u76f4\u63a5\u8207\u8a18\u61b6\u9ad4\u4ea4\u63db\u6578\u64da\u800c\u4e0d\u9700\u8981 CPU \u4ecb\u5165\u7684\u6280\u8853\uff0c\u53ef\u4ee5\u986f\u8457\u63d0\u9ad8\u7cfb\u7d71\u6027\u80fd\u4e26\u964d\u4f4e CPU \u8ca0\u8f09\u3002<\/p>\n\n\n\n<p><strong>SPI DMA<\/strong>&nbsp;\u7d50\u5408\u4e86\u5169\u8005\u7684\u512a\u52e2\uff0c\u901a\u904e DMA \u63a7\u5236\u5668\u4f86\u8655\u7406 SPI \u6578\u64da\u50b3\u8f38\uff0c\u4f7f CPU \u80fd\u5920\u5c08\u6ce8\u65bc\u5176\u4ed6\u4efb\u52d9\uff0c\u7279\u5225\u9069\u5408\u9ad8\u5e36\u5bec\u6216\u5be6\u6642\u6027\u8981\u6c42\u9ad8\u7684\u61c9\u7528\u5834\u666f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pwm-\u8207\u547c\u5438\u71c8\u539f\u7406\u5feb\u901f\u7406\u89e3\">\u539f\u7406\u5feb\u901f\u7406\u89e3<\/h2>\n\n\n\n<p>SPI DMA \u7684\u5de5\u4f5c\u539f\u7406\u53ef\u4ee5\u7c21\u5316\u70ba\u4ee5\u4e0b\u5e7e\u500b\u6b65\u9a5f\uff1a<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>CPU \u521d\u59cb\u5316 SPI \u548c DMA \u63a7\u5236\u5668<\/li>\n\n\n\n<li>CPU \u8a2d\u7f6e\u6578\u64da\u7de9\u885d\u5340\u548c\u50b3\u8f38\u53c3\u6578<\/li>\n\n\n\n<li>DMA \u63a7\u5236\u5668\u81ea\u52d5\u5f9e\u8a18\u61b6\u9ad4\u8b80\u53d6\u6578\u64da\u4e26\u901a\u904e SPI \u767c\u9001<\/li>\n\n\n\n<li>\u50b3\u8f38\u5b8c\u6210\u5f8c\uff0cDMA \u89f8\u767c\u4e2d\u65b7\u901a\u77e5 CPU<\/li>\n\n\n\n<li>CPU \u8655\u7406\u5f8c\u7e8c\u64cd\u4f5c\u6216\u6e96\u5099\u4e0b\u4e00\u6b21\u50b3\u8f38<\/li>\n<\/ol>\n\n\n\n<p>\u9019\u7a2e\u65b9\u5f0f\u907f\u514d\u4e86 CPU \u5728\u6578\u64da\u50b3\u8f38\u904e\u7a0b\u4e2d\u4e0d\u65b7\u4ecb\u5165\uff0c\u5927\u5927\u63d0\u9ad8\u4e86\u7cfb\u7d71\u6548\u7387\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u74b0\">\u958b\u767c\u74b0\u5883<\/h2>\n\n\n\n<p>\u5728\u958b\u59cb\u7de8\u7a0b\u4e4b\u524d\uff0c\u8acb\u78ba\u4fdd\u5df2\u5b8c\u6210\u4ee5\u4e0b\u6e96\u5099\u5de5\u4f5c\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/saludpcb.com\/zh\/esp32-tutorial-how-to-create-an-esp32-project-with-vscode\/\">\u5b89\u88dd ESP-IDF \u958b\u767c\u74b0\u5883<\/a> (\u81f3\u5c11\u7248\u672c v4.4 \u6216\u66f4\u9ad8)\u3002<\/li>\n\n\n\n<li><a href=\"https:\/\/saludpcb.com\/zh\/esp32-devkit-module-pinout\/\">ESP32 \u958b\u767c\u677f<\/a>\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u5c08\u6848\u7d50\u69cb\"><strong>\u5c08\u6848\u7d50\u69cb<\/strong><\/h2>\n\n\n\n<p>\u5178\u578b\u7684 ESP-IDF \u9805\u76ee\u7d50\u69cb\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">spi_dma_demo\/\n\u251c\u2500\u2500 CMakeLists.txt\n\u251c\u2500\u2500 main\/\n\u2502   \u251c\u2500\u2500 CMakeLists.txt\n\u2502   \u2514\u2500\u2500 spi_dma_demo.c\n\u251c\u2500\u2500 sdkconfig\n\u2514\u2500\u2500 README.md<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u4f7f\u7528-esp-idf-\u64b0\u5beb\u547c\u5438\u71c8\u63a7\u5236\u7a0b\u5f0f\">\u7a0b\u5f0f\u78bc<\/h2>\n\n\n\n<p>\u4ee5\u4e0b\u662f\u5b8c\u6574\u7684 SPI DMA \u5be6\u73fe\u4ee3\u78bc\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">#include \"driver\/spi_master.h\"\n#include \"driver\/gpio.h\"\n#include \"esp_log.h\"\n#include \"freertos\/FreeRTOS.h\"\n#include \"freertos\/task.h\"\n\n#define TAG \"SPI_DMA_DEMO\"\n\n\/\/ SPI pin configuration\n#define PIN_NUM_MISO 12\n#define PIN_NUM_MOSI 11\n#define PIN_NUM_CLK  13\n#define PIN_NUM_CS   10\n\n\/\/ SPI settings\n#define SPI_HOST    SPI2_HOST\n#define DMA_CHAN    1\n#define SPI_FREQ_HZ 10 * 1000 * 1000  \/\/ 10MHz\n\nspi_device_handle_t spi;\n\nvoid init_spi_with_dma() {\n    \/\/ 1. Configure the SPI bus\n    spi_bus_config_t buscfg = {\n        .miso_io_num = PIN_NUM_MISO,\n        .mosi_io_num = PIN_NUM_MOSI,\n        .sclk_io_num = PIN_NUM_CLK,\n        .quadwp_io_num = -1,\n        .quadhd_io_num = -1,\n        .max_transfer_sz = 4096,  \/\/ Max transfer size for DMA\n    };\n\n    \/\/ 2. Initialize the SPI bus\n    ESP_ERROR_CHECK(spi_bus_initialize(SPI_HOST, &amp;buscfg, DMA_CHAN));\n\n    \/\/ 3. Attach a device to the SPI bus\n    spi_device_interface_config_t devcfg = {\n        .clock_speed_hz = SPI_FREQ_HZ,\n        .mode = 0,  \/\/ SPI mode 0\n        .spics_io_num = PIN_NUM_CS,\n        .queue_size = 7,  \/\/ Transaction queue size\n        .pre_cb = NULL,   \/\/ Pre-transfer callback (optional)\n        .post_cb = NULL,  \/\/ Post-transfer callback (optional)\n    };\n\n    ESP_ERROR_CHECK(spi_bus_add_device(SPI_HOST, &amp;devcfg, &amp;spi));\n}\n\nvoid spi_dma_transfer(const uint8_t *data, size_t len) {\n    \/\/ Create a transaction descriptor\n    spi_transaction_t t = {\n        .length = len * 8,  \/\/ Data length in bits\n        .tx_buffer = data,\n        .user = NULL\n    };\n\n    \/\/ Queue the transaction\n    ESP_ERROR_CHECK(spi_device_queue_trans(spi, &amp;t, portMAX_DELAY));\n\n    \/\/ Wait for the transaction to complete\n    spi_transaction_t *rtrans;\n    ESP_ERROR_CHECK(spi_device_get_trans_result(spi, &amp;rtrans, portMAX_DELAY));\n\n    ESP_LOGI(TAG, \"DMA transfer completed, size: %d bytes\", len);\n}\n\nvoid app_main() {\n    \/\/ Initialize SPI with DMA\n    init_spi_with_dma();\n\n    \/\/ Prepare test data\n    uint8_t test_data[256];\n    for (int i = 0; i &lt; sizeof(test_data); i++) {\n        test_data[i] = i &amp; 0xFF;\n    }\n\n    while (1) {\n        \/\/ Perform DMA transfer\n        spi_dma_transfer(test_data, sizeof(test_data));\n\n        \/\/ Delay for 1 second\n        vTaskDelay(pdMS_TO_TICKS(1000));\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u7de8\u8b6f\u548c\u71d2\u9304\">\u7a0b\u5f0f\u78bc\u89e3\u8aaa<\/h2>\n\n\n\n<p><strong>SPI \u521d\u59cb\u5316\u90e8\u5206<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SPI Bus<\/strong> <strong>\u914d\u7f6e<\/strong>\u00a0(<code>spi_bus_config_t<\/code>)<\/li>\n\n\n\n<li><strong>SPI Bus <\/strong><code><strong>\u521d\u59cb\u5316<\/strong>(<code>spi_bus_initialize<\/code>)<\/code><\/li>\n\n\n\n<li><strong>SPI Bus<\/strong> <strong>\u914d\u7f6e<\/strong>\u00a0(<code>spi_bus_config_t<\/code>)<\/li>\n\n\n\n<li><strong>SPI Bus<\/strong> <strong>\u521d\u59cb\u5316<\/strong>\u00a0(<code>spi_bus_initialize<\/code>)<\/li>\n\n\n\n<li><strong>SPI Bus<\/strong> <strong>\u6dfb\u52a0<\/strong>\u00a0(<code>spi_bus_add_device<\/code>)<\/li>\n<\/ul>\n\n\n\n<p><strong>DMA \u50b3\u8f38\u90e8\u5206<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u50b3\u8f38\u63cf\u8ff0\u7b26<\/strong>\u00a0(<code>spi_transaction_t<\/code>) : \u6307\u5b9a\u6578\u64da\u9577\u5ea6 (\u4ee5\u4f4d\u70ba\u55ae\u4f4d) \u548c \u8a2d\u7f6e\u767c\u9001\u7de9\u885d\u5340\u3002<\/li>\n\n\n\n<li><strong>\u968a\u5217\u50b3\u8f38<\/strong>\u00a0(<code>spi_device_queue_trans<\/code>)\uff1a\u5c07\u50b3\u8f38\u8acb\u6c42\u52a0\u5165\u968a\u5217\u4e2d\u3002<\/li>\n\n\n\n<li><strong>\u7372\u53d6\u7d50\u679c<\/strong>\u00a0(<code>spi_device_get_trans_result<\/code>) : \u7b49\u5f85\u50b3\u8f38\u5b8c\u6210\u4e26\u53ef\u7372\u5f97\u50b3\u8f38\u72c0\u614b\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u7de8\u8b6f\u548c\u71d2\u9304-1\">\u7de8\u8b6f\u548c\u71d2\u9304<\/h2>\n\n\n\n<p>\u5b8c\u6210\u7a0b\u5f0f\u78bc\u5f8c\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 <a href=\"https:\/\/www.espressif.com\/en\/products\/sdks\/esp-idf\" target=\"_blank\" rel=\"noopener\">ESP-IDF<\/a> \u63d0\u4f9b\u7684\u547d\u4ee4\u9032\u884c\u7de8\u8b6f\u3001\u71d2\u9304\u548c\u76e3\u63a7\u3002<\/p>\n\n\n\n<p>\u5728 VS Code \u7684\u5de6\u4e0b\u89d2 ESP-IDF \u5de5\u5177\u5217\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9ede\u9078 <strong>Build project<\/strong><\/li>\n\n\n\n<li>\u9ede\u9078 <strong>Flash device<\/strong><\/li>\n\n\n\n<li>\u9ede\u9078 <strong>Monitor device<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u6210\u529f\u904b\u884c\u5f8c\uff0c\u4e32\u53e3\u76e3\u8996\u5668\u5c07\u986f\u793a\u5982\u4e0b\u8f38\u51fa\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">I (285) SPI_DMA_DEMO: DMA transfer completed, size: 256 bytes\nI (1285) SPI_DMA_DEMO: DMA transfer completed, size: 256 bytes\nI (2285) SPI_DMA_DEMO: DMA transfer completed, size: 256 bytes\n...<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u7d50\u8ad6\">\u7d50\u8ad6<\/h2>\n\n\n\n<p>\u900f\u904e\u672c\u6587\u7684\u5be6\u4f5c\u8207\u89e3\u6790\uff0c\u6211\u5011\u6df1\u5165\u63a2\u8a0e\u4e86\u5982\u4f55\u904b\u7528&nbsp;<strong>ESP32 \u7684 SPI DMA \u6280\u8853<\/strong>&nbsp;\u4f86\u7a81\u7834\u50b3\u7d71\u6578\u64da\u50b3\u8f38\u7684\u6548\u80fd\u9650\u5236\u3002\u9019\u7a2e\u300c\u7e5e\u904e CPU \u76f4\u63a5\u5b58\u53d6\u300d\u7684\u8a2d\u8a08\uff0c\u4e0d\u50c5\u5927\u5e45\u964d\u4f4e\u4e86\u7cfb\u7d71\u8ca0\u64d4\uff0c\u66f4\u70ba\u9ad8\u901f\u6578\u64da\u50b3\u8f38\u958b\u5275\u4e86\u65b0\u7684\u53ef\u80fd\u6027\u3002<\/p>\n\n\n\n<p>\u5728&nbsp;<strong>VSCode + ESP-IDF<\/strong>&nbsp;\u7684\u958b\u767c\u74b0\u5883\u4e0b\uff0c\u6211\u5011\u5f9e\u5e95\u5c64\u66ab\u5b58\u5668\u914d\u7f6e\u5230\u5be6\u969b\u61c9\u7528\u5c64\u9762\uff0c\u4e00\u6b65\u6b65\u5be6\u73fe\u4e86\u9ad8\u6548\u7684 SPI \u901a\u4fe1\u65b9\u6848\u3002\u9019\u9805\u6280\u8853\u7279\u5225\u9069\u5408\u9700\u8981\u5373\u6642\u8655\u7406\u5927\u91cf\u6578\u64da\u7684\u61c9\u7528\u5834\u666f\uff0c\u5982\u5de5\u696d\u611f\u6e2c\u5668\u63a1\u96c6\u3001\u9ad8\u901f\u8a18\u61b6\u9ad4\u8b80\u5beb\uff0c\u6216\u662f\u6d41\u66a2\u7684\u5716\u5f62\u986f\u793a\u63a7\u5236\u7b49\u3002<\/p>\n\n\n\n<p>\u638c\u63e1\u4e86 SPI DMA \u7684\u6838\u5fc3\u539f\u7406\u5f8c\uff0c\u5efa\u8b70\u53ef\u4ee5\u9032\u4e00\u6b65\u5617\u8a66\u7d50\u5408\u96d9\u7de9\u885d\u6280\u8853\u4f86\u512a\u5316\u5373\u6642\u6027\uff0c\u6216\u662f\u5728 FreeRTOS \u7684\u591a\u4efb\u52d9\u74b0\u5883\u4e2d\u6e2c\u8a66\u5176\u4e26\u884c\u8655\u7406\u80fd\u529b\uff0c\u9019\u4e9b\u9032\u968e\u61c9\u7528\u90fd\u80fd\u8b93\u4f60\u7684 ESP32 \u5c08\u6848\u767c\u63ee\u66f4\u6975\u81f4\u7684\u6548\u80fd\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator alignwide has-text-color has-palette-color-1-color has-alpha-channel-opacity has-palette-color-1-background-color has-background is-style-wide\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u73fe\u4ee3\u5d4c\u5165\u5f0f\u7cfb\u7d71\u958b\u767c\u4e2d\uff0c\u9ad8\u6548\u7684\u5916\u8a2d\u901a\u4fe1\u662f\u5be6\u73fe\u9ad8\u6027\u80fd\u61c9\u7528\u7684\u95dc\u9375\u3002ESP32 \u4f5c\u70ba\u4e00\u6b3e\u529f\u80fd\u5f37\u5927\u7684 WiFi\/\u85cd\u7259\u96d9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3568,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,53,83],"tags":[27,21,44,9,11],"class_list":["post-3563","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-module","category-esp32","category-featured","tag-c","tag-ide","tag-programming-language","tag-python","tag-tutorial"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts\/3563","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/comments?post=3563"}],"version-history":[{"count":6,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts\/3563\/revisions"}],"predecessor-version":[{"id":3570,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/posts\/3563\/revisions\/3570"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/media\/3568"}],"wp:attachment":[{"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/media?parent=3563"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/categories?post=3563"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/saludpcb.com\/zh\/wp-json\/wp\/v2\/tags?post=3563"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}