forked from M-Labs/kirdy
Update rust, stm32-eth, hal, smoltcp versions
This commit is contained in:
parent
f8abfd4300
commit
af68b0e90a
|
@ -177,9 +177,9 @@ checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "defmt"
|
name = "defmt"
|
||||||
version = "0.3.5"
|
version = "0.3.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a8a2d011b2fee29fb7d659b83c43fce9a2cb4df453e16d441a51448e448f3f98"
|
checksum = "3939552907426de152b3c2c6f51ed53f98f448babd26f28694c95f5906194595"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"defmt-macros",
|
"defmt-macros",
|
||||||
|
@ -187,35 +187,44 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "defmt-macros"
|
name = "defmt-macros"
|
||||||
version = "0.3.6"
|
version = "0.3.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "54f0216f6c5acb5ae1a47050a6645024e6edafc2ee32d421955eccfef12ef92e"
|
checksum = "18bdc7a7b92ac413e19e95240e75d3a73a8d8e78aa24a594c22cbb4d44b4bbda"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"defmt-parser",
|
"defmt-parser",
|
||||||
"proc-macro-error",
|
"proc-macro-error",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.48",
|
"syn 2.0.53",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "defmt-parser"
|
name = "defmt-parser"
|
||||||
version = "0.3.3"
|
version = "0.3.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "269924c02afd7f94bc4cecbfa5c379f6ffcf9766b3408fe63d22c728654eccd0"
|
checksum = "ff4a5fefe330e8d7f31b16a318f9ce81000d8e35e69b93eae154d16d2278f70f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deranged"
|
name = "deranged"
|
||||||
version = "0.3.10"
|
version = "0.3.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc"
|
checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"powerfmt",
|
"powerfmt",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "document-features"
|
||||||
|
version = "0.2.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ef5282ad69563b5fc40319526ba27e0e7363d552a896f0297d54f767717f9b95"
|
||||||
|
dependencies = [
|
||||||
|
"litrs",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "embedded-dma"
|
name = "embedded-dma"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
|
@ -237,10 +246,17 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "embedded-hal"
|
name = "embedded-hal"
|
||||||
version = "1.0.0-alpha.8"
|
version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c3babfc7fd332142a0b11aebf592992f211f4e01b6222fb04b03aba1bd80018d"
|
checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embedded-hal-nb"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"embedded-hal 1.0.0",
|
||||||
"nb 1.1.0",
|
"nb 1.1.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -263,9 +279,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "embedded-storage"
|
name = "embedded-storage"
|
||||||
version = "0.2.0"
|
version = "0.3.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "723dce4e9f25b6e6c5f35628e144794e5b459216ed7da97b7c4b66cdb3fa82ca"
|
checksum = "a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "embedded-time"
|
name = "embedded-time"
|
||||||
|
@ -276,6 +292,26 @@ dependencies = [
|
||||||
"num",
|
"num",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "enumflags2"
|
||||||
|
version = "0.7.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d"
|
||||||
|
dependencies = [
|
||||||
|
"enumflags2_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "enumflags2_derive"
|
||||||
|
version = "0.7.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.53",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fugit"
|
name = "fugit"
|
||||||
version = "0.3.7"
|
version = "0.3.7"
|
||||||
|
@ -347,6 +383,15 @@ dependencies = [
|
||||||
"byteorder",
|
"byteorder",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hash32"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606"
|
||||||
|
dependencies = [
|
||||||
|
"byteorder",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heapless"
|
name = "heapless"
|
||||||
version = "0.5.6"
|
version = "0.5.6"
|
||||||
|
@ -374,6 +419,16 @@ dependencies = [
|
||||||
"stable_deref_trait",
|
"stable_deref_trait",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "heapless"
|
||||||
|
version = "0.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
|
||||||
|
dependencies = [
|
||||||
|
"hash32 0.3.1",
|
||||||
|
"stable_deref_trait",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ieee802_3_miim"
|
name = "ieee802_3_miim"
|
||||||
version = "0.8.0"
|
version = "0.8.0"
|
||||||
|
@ -425,6 +480,12 @@ version = "0.2.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
|
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "litrs"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lock_api"
|
name = "lock_api"
|
||||||
version = "0.4.11"
|
version = "0.4.11"
|
||||||
|
@ -437,9 +498,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.20"
|
version = "0.4.21"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
|
checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "managed"
|
name = "managed"
|
||||||
|
@ -472,7 +533,7 @@ checksum = "89f46d25f40e41f552d76b8eb9e225fe493ebf978a5c3f42b7599e45cfe6b4e3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.48",
|
"syn 2.0.53",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -535,20 +596,25 @@ dependencies = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-integer"
|
name = "num-conv"
|
||||||
version = "0.1.45"
|
version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
|
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-integer"
|
||||||
|
version = "0.1.46"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
|
||||||
"num-traits",
|
"num-traits",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-iter"
|
name = "num-iter"
|
||||||
version = "0.1.43"
|
version = "0.1.44"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
|
checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"num-integer",
|
"num-integer",
|
||||||
|
@ -568,9 +634,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-traits"
|
name = "num-traits"
|
||||||
version = "0.2.17"
|
version = "0.2.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
|
checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"libm",
|
"libm",
|
||||||
|
@ -593,7 +659,7 @@ checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.48",
|
"syn 2.0.53",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -602,6 +668,12 @@ version = "0.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "de96540e0ebde571dc55c73d60ef407c653844e6f9a1e2fdbd40c07b9252d812"
|
checksum = "de96540e0ebde571dc55c73d60ef407c653844e6f9a1e2fdbd40c07b9252d812"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "portable-atomic"
|
||||||
|
version = "1.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "postcard"
|
name = "postcard"
|
||||||
version = "0.5.2"
|
version = "0.5.2"
|
||||||
|
@ -651,9 +723,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.78"
|
version = "1.0.79"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
|
checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
@ -698,14 +770,14 @@ version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
|
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"semver 1.0.20",
|
"semver 1.0.22",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
version = "1.0.16"
|
version = "1.0.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
|
checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scopeguard"
|
name = "scopeguard"
|
||||||
|
@ -724,9 +796,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "semver"
|
name = "semver"
|
||||||
version = "1.0.20"
|
version = "1.0.22"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
|
checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "semver-parser"
|
name = "semver-parser"
|
||||||
|
@ -736,9 +808,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.196"
|
version = "1.0.197"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
|
checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
@ -756,13 +828,13 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.196"
|
version = "1.0.197"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
|
checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.48",
|
"syn 2.0.53",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -798,14 +870,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smoltcp"
|
name = "smoltcp"
|
||||||
version = "0.10.0"
|
version = "0.11.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8d2e3a36ac8fea7b94e666dfa3871063d6e0a5c9d5d4fec9a1a6b7b6760f0229"
|
checksum = "5a1a996951e50b5971a2c8c0fa05a381480d70a933064245c4a223ddc87ccc97"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"heapless 0.7.17",
|
"heapless 0.8.0",
|
||||||
"log",
|
"log",
|
||||||
"managed",
|
"managed",
|
||||||
]
|
]
|
||||||
|
@ -827,9 +899,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stm32-eth"
|
name = "stm32-eth"
|
||||||
version = "0.5.2"
|
version = "0.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "114ecd655ee196c97dc4b3ff63b48046f2e2e2a7b3f53cc5114b9599606c093b"
|
checksum = "97b858953e04ae990830500e70363d336609814ebb014c3e73dc7c1736aea65f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aligned",
|
"aligned",
|
||||||
"cortex-m",
|
"cortex-m",
|
||||||
|
@ -855,18 +927,20 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stm32f4xx-hal"
|
name = "stm32f4xx-hal"
|
||||||
version = "0.14.0"
|
version = "0.20.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dbb045e607d0946eca27523141d192d7ee91aea0dff9736be100b8fc0c186abf"
|
checksum = "10c41454f262c0be0c35b8cfc0d971e598281f7a9be32e894dc97a0b21deadfe"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bare-metal 1.0.0",
|
"bare-metal 1.0.0",
|
||||||
"bitflags",
|
|
||||||
"cortex-m",
|
"cortex-m",
|
||||||
"cortex-m-rt",
|
"cortex-m-rt",
|
||||||
|
"document-features",
|
||||||
"embedded-dma",
|
"embedded-dma",
|
||||||
"embedded-hal 0.2.7",
|
"embedded-hal 0.2.7",
|
||||||
"embedded-hal 1.0.0-alpha.8",
|
"embedded-hal 1.0.0",
|
||||||
|
"embedded-hal-nb",
|
||||||
"embedded-storage",
|
"embedded-storage",
|
||||||
|
"enumflags2",
|
||||||
"fugit",
|
"fugit",
|
||||||
"fugit-timer",
|
"fugit-timer",
|
||||||
"nb 1.1.0",
|
"nb 1.1.0",
|
||||||
|
@ -874,6 +948,7 @@ dependencies = [
|
||||||
"stm32f4",
|
"stm32f4",
|
||||||
"synopsys-usb-otg",
|
"synopsys-usb-otg",
|
||||||
"time",
|
"time",
|
||||||
|
"vcell",
|
||||||
"void",
|
"void",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -890,9 +965,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.48"
|
version = "2.0.53"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
|
checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -901,9 +976,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "synopsys-usb-otg"
|
name = "synopsys-usb-otg"
|
||||||
version = "0.3.2"
|
version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "678f3707a7b1fd4863023292c42f73c6bab0e9b0096f41ae612d1af0ff221b45"
|
checksum = "e948d523b316939545d8b21a48c27aef150ce25321b9f95ff7978647a806a6fe"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cortex-m",
|
"cortex-m",
|
||||||
"embedded-hal 0.2.7",
|
"embedded-hal 0.2.7",
|
||||||
|
@ -913,31 +988,32 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
version = "1.0.51"
|
version = "1.0.58"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7"
|
checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"thiserror-impl",
|
"thiserror-impl",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror-impl"
|
name = "thiserror-impl"
|
||||||
version = "1.0.51"
|
version = "1.0.58"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df"
|
checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.48",
|
"syn 2.0.53",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time"
|
name = "time"
|
||||||
version = "0.3.30"
|
version = "0.3.34"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
|
checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"deranged",
|
"deranged",
|
||||||
|
"num-conv",
|
||||||
"powerfmt",
|
"powerfmt",
|
||||||
"time-core",
|
"time-core",
|
||||||
]
|
]
|
||||||
|
@ -979,18 +1055,23 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "usb-device"
|
name = "usb-device"
|
||||||
version = "0.2.9"
|
version = "0.3.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508"
|
checksum = "98816b1accafbb09085168b90f27e93d790b4bfa19d883466b5e53315b5f06a6"
|
||||||
|
dependencies = [
|
||||||
|
"heapless 0.8.0",
|
||||||
|
"portable-atomic",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "usbd-serial"
|
name = "usbd-serial"
|
||||||
version = "0.1.1"
|
version = "0.2.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "db75519b86287f12dcf0d171c7cf4ecc839149fe9f3b720ac4cfce52959e1dfe"
|
checksum = "c233fa6eb0417df4fa34aef190dfe725497a8a8120310d360e0c91653ce4f792"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"embedded-hal 0.2.7",
|
"embedded-hal 0.2.7",
|
||||||
"nb 0.1.3",
|
"embedded-io",
|
||||||
|
"nb 1.1.0",
|
||||||
"usb-device",
|
"usb-device",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
14
Cargo.toml
14
Cargo.toml
|
@ -15,21 +15,21 @@ default-target = "thumbv7em-none-eabihf"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
panic-halt = "0.2.0"
|
panic-halt = "0.2.0"
|
||||||
cortex-m = { version = "0.7.6", features = ["critical-section-single-core"] }
|
cortex-m = { version = "0.7.7", features = ["critical-section-single-core"] }
|
||||||
cortex-m-rt = { version = "0.7.1", features = ["device"] }
|
cortex-m-rt = { version = "0.7.3", features = ["device"] }
|
||||||
cortex-m-semihosting = "0.5.0"
|
cortex-m-semihosting = "0.5.0"
|
||||||
log = "0.4.17"
|
log = "0.4.17"
|
||||||
bare-metal = "1"
|
bare-metal = "1"
|
||||||
nb = "1"
|
nb = "1"
|
||||||
cortex-m-log = { version = "0.7.0", features = ["log-integration", "semihosting"] }
|
cortex-m-log = { version = "0.7.0", features = ["log-integration", "semihosting"] }
|
||||||
stm32f4xx-hal = { version = "0.14.0", features = ["rt", "stm32f407", "usb_fs"] }
|
stm32f4xx-hal = { version = "0.20.0", features = ["stm32f407", "otg-fs", "usb_fs"] }
|
||||||
stm32-eth = { version = "0.5.2", features = ["stm32f407", "smoltcp-phy", "smoltcp"] }
|
stm32-eth = { version = "0.6.0", features = ["stm32f407", "smoltcp-phy", "smoltcp"] }
|
||||||
ieee802_3_miim = "0.8.0"
|
ieee802_3_miim = "0.8.0"
|
||||||
smoltcp = { version = "0.10.0", default-features = false, features = ["proto-ipv4", "socket-tcp", "log", "medium-ethernet"] }
|
smoltcp = { version = "0.11.0", default-features = false, features = ["proto-ipv4", "socket-tcp", "log", "medium-ethernet"] }
|
||||||
uom = { version = "0.30", default-features = false, features = ["autoconvert", "si", "f32", "use_serde"] }
|
uom = { version = "0.30", default-features = false, features = ["autoconvert", "si", "f32", "use_serde"] }
|
||||||
num-traits = { version = "0.2.15", default-features = false, features = ["libm"] }
|
num-traits = { version = "0.2.15", default-features = false, features = ["libm"] }
|
||||||
usb-device = "0.2.9"
|
usb-device = "0.3.2"
|
||||||
usbd-serial = "0.1.1"
|
usbd-serial = "0.2.1"
|
||||||
fugit = "0.3.6"
|
fugit = "0.3.6"
|
||||||
rtt-target = { version = "0.3.1", features = ["cortex-m"] }
|
rtt-target = { version = "0.3.1", features = ["cortex-m"] }
|
||||||
miniconf = "0.9.0"
|
miniconf = "0.9.0"
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs { system = "x86_64-linux"; overlays = [ (import mozilla-overlay) ]; };
|
pkgs = import nixpkgs { system = "x86_64-linux"; overlays = [ (import mozilla-overlay) ]; };
|
||||||
rustManifest = pkgs.fetchurl {
|
rustManifest = pkgs.fetchurl {
|
||||||
url = "https://static.rust-lang.org/dist/2023-02-09/channel-rust-stable.toml";
|
url = "https://static.rust-lang.org/dist/2024-03-21/channel-rust-stable.toml";
|
||||||
sha256 = "4b8740ee77b62291471be1278d77e8826ab01b20c54915859c9f1ccb8299af59";
|
sha256 = "faccaa01dda45fc2956bcfd4da0cf76e52104d3b1862ddd4eb7c4159a18e49cf";
|
||||||
};
|
};
|
||||||
|
|
||||||
targets = [
|
targets = [
|
||||||
|
|
|
@ -39,7 +39,7 @@ impl StoreBackend for FlashBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn backup_space(&self) -> &'static mut [u8] {
|
fn backup_space(&self) -> &'static mut [u8] {
|
||||||
unsafe { &mut BACKUP_SPACE }
|
unsafe { BACKUP_SPACE.as_mut() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ use crate::thermostat::ad7172;
|
||||||
use crate::net::net::EthernetMgmtPins;
|
use crate::net::net::EthernetMgmtPins;
|
||||||
use crate::device::hw_rev::{HWRev, HwRevPins};
|
use crate::device::hw_rev::{HWRev, HwRevPins};
|
||||||
use stm32_eth::EthPins;
|
use stm32_eth::EthPins;
|
||||||
|
use stm32f4xx_hal::gpio::alt::otg_fs::{Dm, Dp};
|
||||||
use stm32f4xx_hal::{
|
use stm32f4xx_hal::{
|
||||||
gpio::{gpioa::*, gpiob::*, gpioc::*, GpioExt, Input, Speed},
|
gpio::{gpioa::*, gpiob::*, gpioc::*, GpioExt, Input, Speed},
|
||||||
otg_fs::USB,
|
otg_fs::USB,
|
||||||
|
@ -16,7 +17,7 @@ use stm32f4xx_hal::{
|
||||||
},
|
},
|
||||||
rcc::Clocks,
|
rcc::Clocks,
|
||||||
spi::{NoMiso, Spi},
|
spi::{NoMiso, Spi},
|
||||||
timer::pwm::PwmExt,
|
timer::{Channel1, Channel2, Channel3, pwm::PwmExt}
|
||||||
};
|
};
|
||||||
|
|
||||||
pub type EthernetPins =
|
pub type EthernetPins =
|
||||||
|
@ -67,8 +68,8 @@ pub fn setup(
|
||||||
usb_global: otg_fs_global,
|
usb_global: otg_fs_global,
|
||||||
usb_device: otg_fs_device,
|
usb_device: otg_fs_device,
|
||||||
usb_pwrclk: otg_fs_pwrclk,
|
usb_pwrclk: otg_fs_pwrclk,
|
||||||
pin_dm: gpioa.pa11.into_alternate(),
|
pin_dm: Dm::PA11(gpioa.pa11.into_alternate()),
|
||||||
pin_dp: gpioa.pa12.into_alternate(),
|
pin_dp: Dp::PA12(gpioa.pa12.into_alternate()),
|
||||||
hclk: clocks.hclk(),
|
hclk: clocks.hclk(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -94,7 +95,7 @@ pub fn setup(
|
||||||
spi2,
|
spi2,
|
||||||
(
|
(
|
||||||
gpiob.pb10.into_alternate(),
|
gpiob.pb10.into_alternate(),
|
||||||
NoMiso {},
|
NoMiso::new(),
|
||||||
gpiob.pb15.into_alternate(),
|
gpiob.pb15.into_alternate(),
|
||||||
),
|
),
|
||||||
max5719::SPI_MODE,
|
max5719::SPI_MODE,
|
||||||
|
@ -113,9 +114,9 @@ pub fn setup(
|
||||||
};
|
};
|
||||||
|
|
||||||
let pwm_chs = (
|
let pwm_chs = (
|
||||||
gpiob.pb6.into_alternate(),
|
Channel1::new(gpiob.pb6),
|
||||||
gpiob.pb7.into_alternate(),
|
Channel2::new(gpiob.pb7),
|
||||||
gpiob.pb8.into_alternate(),
|
Channel3::new(gpiob.pb8),
|
||||||
);
|
);
|
||||||
let (max_i_neg0, max_v0, max_i_pos0) =
|
let (max_i_neg0, max_v0, max_i_pos0) =
|
||||||
tim4.pwm_hz(pwm_chs, PWM_FREQ_KHZ.convert(), &clocks).split();
|
tim4.pwm_hz(pwm_chs, PWM_FREQ_KHZ.convert(), &clocks).split();
|
||||||
|
@ -126,7 +127,7 @@ pub fn setup(
|
||||||
spi1,
|
spi1,
|
||||||
(
|
(
|
||||||
gpiob.pb3.into_alternate(),
|
gpiob.pb3.into_alternate(),
|
||||||
NoMiso {},
|
NoMiso::new(),
|
||||||
gpiob.pb5.into_alternate(),
|
gpiob.pb5.into_alternate(),
|
||||||
),
|
),
|
||||||
ad5680::SPI_MODE,
|
ad5680::SPI_MODE,
|
||||||
|
|
|
@ -9,6 +9,8 @@ use stm32f4xx_hal::{
|
||||||
pac::{interrupt, Interrupt, NVIC},
|
pac::{interrupt, Interrupt, NVIC},
|
||||||
};
|
};
|
||||||
use usb_device::{
|
use usb_device::{
|
||||||
|
descriptor::lang_id,
|
||||||
|
device::StringDescriptors,
|
||||||
class_prelude::UsbBusAllocator,
|
class_prelude::UsbBusAllocator,
|
||||||
prelude::{UsbDevice, UsbDeviceBuilder, UsbVidPid},
|
prelude::{UsbDevice, UsbDeviceBuilder, UsbVidPid},
|
||||||
};
|
};
|
||||||
|
@ -27,16 +29,19 @@ pub struct State {
|
||||||
|
|
||||||
impl State {
|
impl State {
|
||||||
pub fn setup(usb: USB) {
|
pub fn setup(usb: USB) {
|
||||||
unsafe { BUS.write(Bus::new(usb, &mut EP_MEMORY)) };
|
unsafe { BUS.write(Bus::new(usb, EP_MEMORY.as_mut())) };
|
||||||
|
|
||||||
|
let str_descriptor = StringDescriptors::new(lang_id::LangID::EN)
|
||||||
|
.manufacturer("M-Labs")
|
||||||
|
.product("Kirdy");
|
||||||
|
|
||||||
let bus = unsafe { BUS.assume_init_ref() };
|
let bus = unsafe { BUS.assume_init_ref() };
|
||||||
let serial = SerialPort::new(bus);
|
let serial = SerialPort::new(bus);
|
||||||
let dev = UsbDeviceBuilder::new(bus, UsbVidPid(0x16c0, 0x27dd))
|
let dev = UsbDeviceBuilder::new(bus, UsbVidPid(0x16c0, 0x27dd))
|
||||||
.manufacturer("M-Labs")
|
|
||||||
.product("Kirdy")
|
|
||||||
.device_release(0x20)
|
.device_release(0x20)
|
||||||
.self_powered(true)
|
.self_powered(true)
|
||||||
.device_class(usbd_serial::USB_CLASS_CDC)
|
.device_class(usbd_serial::USB_CLASS_CDC)
|
||||||
|
.strings(&[str_descriptor]).unwrap()
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
free(|_| unsafe {
|
free(|_| unsafe {
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use stm32f4xx_hal::{
|
use stm32f4xx_hal::{
|
||||||
gpio::{gpioa::*, gpiob::*, gpiod::*, Alternate, Input, Output, PushPull},
|
gpio::{gpioa::*, gpiob::*, gpiod::*, Input, Output, PushPull},
|
||||||
hal::{blocking::spi::Transfer, digital::{v2::OutputPin, v2::InputPin}},
|
hal::{spi::SpiBus, digital::{OutputPin, InputPin}},
|
||||||
pac::SPI2,
|
pac::SPI2,
|
||||||
spi::{NoMiso, Spi, TransferModeNormal},
|
spi::Spi,
|
||||||
};
|
};
|
||||||
|
|
||||||
use uom::si::{
|
use uom::si::{
|
||||||
|
@ -26,7 +26,7 @@ pub trait ChannelPins {
|
||||||
type TerminationStatus: InputPin;
|
type TerminationStatus: InputPin;
|
||||||
type Max5719Load: OutputPin;
|
type Max5719Load: OutputPin;
|
||||||
type Max5719Cs: OutputPin;
|
type Max5719Cs: OutputPin;
|
||||||
type Max5719Spi: Transfer<u8>;
|
type Max5719Spi: SpiBus<u8>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct LdCtrlPhy<C: ChannelPins> {
|
pub struct LdCtrlPhy<C: ChannelPins> {
|
||||||
|
@ -44,7 +44,7 @@ impl ChannelPins for Channel0 {
|
||||||
type Max5719Spi = DacSpi;
|
type Max5719Spi = DacSpi;
|
||||||
}
|
}
|
||||||
|
|
||||||
type DacSpi = Spi<SPI2, (PB10<Alternate<5>>, NoMiso, PB15<Alternate<5>>), TransferModeNormal>;
|
type DacSpi = Spi<SPI2>;
|
||||||
type DacCs = PD8<Output<PushPull>>;
|
type DacCs = PD8<Output<PushPull>>;
|
||||||
type DacLoad = PB14<Output<PushPull>>;
|
type DacLoad = PB14<Output<PushPull>>;
|
||||||
|
|
||||||
|
|
|
@ -1,28 +1,32 @@
|
||||||
use stm32f4xx_hal::timer::{CounterUs, Event};
|
use stm32f4xx_hal::timer::{Event, Counter};
|
||||||
use stm32f4xx_hal::pac::{interrupt, Interrupt, TIM2};
|
use stm32f4xx_hal::pac::{interrupt, Interrupt, TIM2};
|
||||||
|
use stm32f4xx_hal::Listen;
|
||||||
use uom::si::{f32::ElectricCurrent, electric_current::ampere};
|
use uom::si::{f32::ElectricCurrent, electric_current::ampere};
|
||||||
use fugit::{TimerDurationU32, KilohertzU32};
|
use fugit::{TimerDurationU32, KilohertzU32};
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
use log::debug;
|
||||||
|
|
||||||
pub struct LdCurrentOutCtrlTimer {
|
pub struct LdCurrentOutCtrlTimer {
|
||||||
target_i: ElectricCurrent,
|
target_i: ElectricCurrent,
|
||||||
now_i: ElectricCurrent,
|
now_i: ElectricCurrent,
|
||||||
timer: CounterUs<TIM2>,
|
timer: Counter<TIM2, FREQ>,
|
||||||
timeout: bool,
|
timeout: bool,
|
||||||
}
|
}
|
||||||
static mut LD_CURRENT_OUT_CTRL_TIMER: Option<LdCurrentOutCtrlTimer> = None;
|
static mut LD_CURRENT_OUT_CTRL_TIMER: Option<LdCurrentOutCtrlTimer> = None;
|
||||||
|
|
||||||
|
pub const FREQ: u32 = 1000000;
|
||||||
|
|
||||||
/// This timer notifies the main loop to set the correct output current so that ld output current can ramp up/down slowly.
|
/// This timer notifies the main loop to set the correct output current so that ld output current can ramp up/down slowly.
|
||||||
/// The current output slope is guaranteed to be larger but not necessarily equal to than the preset value.
|
/// The current output slope is guaranteed to be larger but not necessarily equal to than the preset value.
|
||||||
impl LdCurrentOutCtrlTimer {
|
impl LdCurrentOutCtrlTimer {
|
||||||
const TIME_STEP_MS: TimerDurationU32<1000000> = TimerDurationU32::from_rate(KilohertzU32::from_raw(1));
|
const TIME_STEP_MS: TimerDurationU32<FREQ> = TimerDurationU32::from_rate(KilohertzU32::from_raw(1));
|
||||||
const STEP_SIZE: ElectricCurrent = ElectricCurrent {
|
const STEP_SIZE: ElectricCurrent = ElectricCurrent {
|
||||||
dimension: PhantomData,
|
dimension: PhantomData,
|
||||||
units: PhantomData,
|
units: PhantomData,
|
||||||
value: 0.0001,
|
value: 0.0001,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn setup(mut tim2: CounterUs<TIM2>) {
|
pub fn setup(mut tim2: Counter<TIM2, FREQ>) {
|
||||||
tim2.start(LdCurrentOutCtrlTimer::TIME_STEP_MS).unwrap();
|
tim2.start(LdCurrentOutCtrlTimer::TIME_STEP_MS).unwrap();
|
||||||
unsafe {
|
unsafe {
|
||||||
cortex_m::peripheral::NVIC::unmask(Interrupt::TIM2);
|
cortex_m::peripheral::NVIC::unmask(Interrupt::TIM2);
|
||||||
|
@ -85,7 +89,10 @@ impl LdCurrentOutCtrlTimer {
|
||||||
|
|
||||||
pub fn clear_irq_flag() {
|
pub fn clear_irq_flag() {
|
||||||
if let Some(ref mut ld_current_out_ctrl_timer ) = LdCurrentOutCtrlTimer::get() {
|
if let Some(ref mut ld_current_out_ctrl_timer ) = LdCurrentOutCtrlTimer::get() {
|
||||||
ld_current_out_ctrl_timer.timer.clear_interrupt(Event::Update);
|
match ld_current_out_ctrl_timer.timer.wait() {
|
||||||
|
Ok(_) => {}
|
||||||
|
Err(_) => {debug!("LD CTRL TIMER Interrupt is not present when clear_irq_flag() is called")}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use crate::device::sys_timer::sleep;
|
use crate::device::sys_timer::sleep;
|
||||||
use fugit::MegahertzU32;
|
use fugit::MegahertzU32;
|
||||||
use stm32f4xx_hal::{
|
use stm32f4xx_hal::{
|
||||||
hal::{blocking::spi::Transfer, digital::v2::OutputPin},
|
hal::{spi::SpiBus, digital::OutputPin},
|
||||||
spi,
|
spi,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -14,13 +14,13 @@ pub const SPI_CLOCK_MHZ: MegahertzU32 = MegahertzU32::from_raw(21);
|
||||||
|
|
||||||
pub const MAX_VALUE: u32 = 0xFFFFF;
|
pub const MAX_VALUE: u32 = 0xFFFFF;
|
||||||
|
|
||||||
pub struct Dac<SPI: Transfer<u8>, S1: OutputPin, S2:OutputPin> {
|
pub struct Dac<SPI: SpiBus<u8>, S1: OutputPin, S2:OutputPin> {
|
||||||
spi: SPI,
|
spi: SPI,
|
||||||
cs_n: S1,
|
cs_n: S1,
|
||||||
load_n: S2,
|
load_n: S2,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<SPI: Transfer<u8>, S1: OutputPin, S2: OutputPin> Dac<SPI, S1, S2> {
|
impl<SPI: SpiBus<u8>, S1: OutputPin, S2: OutputPin> Dac<SPI, S1, S2> {
|
||||||
pub fn new(spi: SPI, mut cs_n: S1, mut load_n: S2) -> Self {
|
pub fn new(spi: SPI, mut cs_n: S1, mut load_n: S2) -> Self {
|
||||||
let _ = cs_n.set_high();
|
let _ = cs_n.set_high();
|
||||||
let _ = load_n.set_high();
|
let _ = load_n.set_high();
|
||||||
|
@ -30,7 +30,7 @@ impl<SPI: Transfer<u8>, S1: OutputPin, S2: OutputPin> Dac<SPI, S1, S2> {
|
||||||
|
|
||||||
fn write(&mut self, buf: &mut [u8]) -> Result<(), SPI::Error> {
|
fn write(&mut self, buf: &mut [u8]) -> Result<(), SPI::Error> {
|
||||||
let _ = self.cs_n.set_low();
|
let _ = self.cs_n.set_low();
|
||||||
self.spi.transfer(buf)?;
|
self.spi.write(buf)?;
|
||||||
let _ = self.cs_n.set_high();
|
let _ = self.cs_n.set_high();
|
||||||
sleep(1);
|
sleep(1);
|
||||||
// must be high for >= 20 ns
|
// must be high for >= 20 ns
|
||||||
|
|
17
src/main.rs
17
src/main.rs
|
@ -9,6 +9,7 @@ mod laser_diode;
|
||||||
mod thermostat;
|
mod thermostat;
|
||||||
mod net;
|
mod net;
|
||||||
|
|
||||||
|
use core::ptr::addr_of_mut;
|
||||||
use device::{boot::bootup, log_setup, sys_timer};
|
use device::{boot::bootup, log_setup, sys_timer};
|
||||||
use crate::net::net::IpSettings;
|
use crate::net::net::IpSettings;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
@ -65,6 +66,8 @@ fn main() -> ! {
|
||||||
|
|
||||||
let mut state = State::default();
|
let mut state = State::default();
|
||||||
|
|
||||||
|
let eth_data_buffer = unsafe { addr_of_mut!(ETH_DATA_BUFFER).as_mut().unwrap()};
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
wd.feed();
|
wd.feed();
|
||||||
|
|
||||||
|
@ -147,9 +150,7 @@ fn main() -> ! {
|
||||||
net::net::for_each(|mut socket, id| {
|
net::net::for_each(|mut socket, id| {
|
||||||
if net::net::eth_is_socket_active(socket) && net::net::eth_is_socket_connected(socket) {
|
if net::net::eth_is_socket_active(socket) && net::net::eth_is_socket_connected(socket) {
|
||||||
if active_report[id] {
|
if active_report[id] {
|
||||||
unsafe {
|
net::cmd_handler::send_status_report(eth_data_buffer, &mut laser, &mut thermostat, &mut socket);
|
||||||
net::cmd_handler::send_status_report(&mut ETH_DATA_BUFFER, &mut laser, &mut thermostat, &mut socket);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -168,14 +169,12 @@ fn main() -> ! {
|
||||||
if eth_is_pending {
|
if eth_is_pending {
|
||||||
net::net::for_each(|mut socket, id| {
|
net::net::for_each(|mut socket, id| {
|
||||||
if net::net::eth_is_socket_active(socket) && net::net::eth_is_socket_connected(socket){
|
if net::net::eth_is_socket_active(socket) && net::net::eth_is_socket_connected(socket){
|
||||||
unsafe{
|
let bytes = net::net::eth_recv(eth_data_buffer, socket);
|
||||||
let bytes = net::net::eth_recv(&mut ETH_DATA_BUFFER, socket);
|
|
||||||
if bytes != 0 {
|
if bytes != 0 {
|
||||||
info!("Ts: {:?}", sys_timer::now());
|
info!("Ts: {:?}", sys_timer::now());
|
||||||
debug!("Number of bytes recv: {:?}", bytes);
|
debug!("Number of bytes recv: {:?}", bytes);
|
||||||
// State Transition
|
// State Transition
|
||||||
net::cmd_handler::execute_cmd(&mut ETH_DATA_BUFFER, bytes, &mut socket, &mut laser, &mut thermostat, &mut state, &mut device_settings, &mut active_report[id]);
|
net::cmd_handler::execute_cmd(eth_data_buffer, bytes, &mut socket, &mut laser, &mut thermostat, &mut state, &mut device_settings, &mut active_report[id]);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -225,9 +224,7 @@ fn main() -> ! {
|
||||||
thermostat.power_down();
|
thermostat.power_down();
|
||||||
net::net::for_each(|mut socket, _| {
|
net::net::for_each(|mut socket, _| {
|
||||||
if net::net::eth_is_socket_active(socket) {
|
if net::net::eth_is_socket_active(socket) {
|
||||||
unsafe {
|
net::cmd_handler::send_response(eth_data_buffer, net::cmd_handler::ResponseEnum::HardReset, None, &mut socket);
|
||||||
net::cmd_handler::send_response(&mut ETH_DATA_BUFFER, net::cmd_handler::ResponseEnum::HardReset, None, &mut socket);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use crate::device::sys_timer::sleep;
|
use crate::device::sys_timer::sleep;
|
||||||
use fugit::MegahertzU32;
|
use fugit::MegahertzU32;
|
||||||
use stm32f4xx_hal::{
|
use stm32f4xx_hal::{
|
||||||
hal::{blocking::spi::Transfer, digital::v2::OutputPin},
|
hal::{spi::SpiBus, digital::OutputPin},
|
||||||
spi,
|
spi,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -15,12 +15,12 @@ pub const SPI_CLOCK_MHZ: MegahertzU32 = MegahertzU32::from_raw(21);
|
||||||
|
|
||||||
pub const MAX_VALUE: u32 = 0x3FFFF;
|
pub const MAX_VALUE: u32 = 0x3FFFF;
|
||||||
|
|
||||||
pub struct Dac<SPI: Transfer<u8>, S: OutputPin> {
|
pub struct Dac<SPI: SpiBus<u8>, S: OutputPin> {
|
||||||
spi: SPI,
|
spi: SPI,
|
||||||
sync: S,
|
sync: S,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<SPI: Transfer<u8>, S: OutputPin> Dac<SPI, S> {
|
impl<SPI: SpiBus<u8>, S: OutputPin> Dac<SPI, S> {
|
||||||
pub fn new(spi: SPI, mut sync: S) -> Self {
|
pub fn new(spi: SPI, mut sync: S) -> Self {
|
||||||
let _ = sync.set_low();
|
let _ = sync.set_low();
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ impl<SPI: Transfer<u8>, S: OutputPin> Dac<SPI, S> {
|
||||||
// must be high for >= 33 ns
|
// must be high for >= 33 ns
|
||||||
sleep(1);
|
sleep(1);
|
||||||
let _ = self.sync.set_low();
|
let _ = self.sync.set_low();
|
||||||
self.spi.transfer(buf)?;
|
self.spi.transfer_in_place(buf)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,12 @@ use core::fmt;
|
||||||
use log::{info, warn};
|
use log::{info, warn};
|
||||||
use stm32f4xx_hal::
|
use stm32f4xx_hal::
|
||||||
{
|
{
|
||||||
spi::{Spi, TransferModeNormal},
|
spi::Spi,
|
||||||
pac::SPI3,
|
pac::SPI3,
|
||||||
gpio::{PC10, PC11, PC12, PA15, Alternate, Output, PushPull},
|
gpio::{PA15, Output, PushPull},
|
||||||
hal::{
|
hal::{
|
||||||
blocking::spi::Transfer,
|
spi::SpiBus,
|
||||||
digital::v2::OutputPin,
|
digital::OutputPin,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use uom::si::{
|
use uom::si::{
|
||||||
|
@ -21,17 +21,17 @@ use super::{
|
||||||
/// AD7172-2 implementation
|
/// AD7172-2 implementation
|
||||||
///
|
///
|
||||||
/// [Manual](https://www.analog.com/media/en/technical-documentation/data-sheets/AD7172-2.pdf)
|
/// [Manual](https://www.analog.com/media/en/technical-documentation/data-sheets/AD7172-2.pdf)
|
||||||
pub struct Adc<SPI: Transfer<u8>, NSS: OutputPin> {
|
pub struct Adc<SPI: SpiBus<u8>, NSS: OutputPin> {
|
||||||
spi: SPI,
|
spi: SPI,
|
||||||
nss: NSS,
|
nss: NSS,
|
||||||
checksum_mode: ChecksumMode,
|
checksum_mode: ChecksumMode,
|
||||||
}
|
}
|
||||||
|
|
||||||
type AdcSpi = Spi<SPI3, (PC10<Alternate<6>>, PC11<Alternate<6>>, PC12<Alternate<6>>), TransferModeNormal>;
|
type AdcSpi = Spi<SPI3>;
|
||||||
type AdcNss = PA15<Output<PushPull>>;
|
type AdcNss = PA15<Output<PushPull>>;
|
||||||
pub type AdcPhy = Adc<AdcSpi, AdcNss>;
|
pub type AdcPhy = Adc<AdcSpi, AdcNss>;
|
||||||
|
|
||||||
impl<SPI: Transfer<u8, Error = E>, NSS: OutputPin, E: fmt::Debug> Adc<SPI, NSS> {
|
impl<SPI: SpiBus<u8, Error = E>, NSS: OutputPin, E: fmt::Debug> Adc<SPI, NSS> {
|
||||||
pub fn new(spi: SPI, mut nss: NSS) -> Result<Self, SPI::Error> {
|
pub fn new(spi: SPI, mut nss: NSS) -> Result<Self, SPI::Error> {
|
||||||
let _ = nss.set_high();
|
let _ = nss.set_high();
|
||||||
let mut adc = Adc {
|
let mut adc = Adc {
|
||||||
|
@ -272,7 +272,7 @@ impl<SPI: Transfer<u8, Error = E>, NSS: OutputPin, E: fmt::Debug> Adc<SPI, NSS>
|
||||||
pub fn reset(&mut self) -> Result<(), SPI::Error> {
|
pub fn reset(&mut self) -> Result<(), SPI::Error> {
|
||||||
let mut buf = [0xFFu8; 8];
|
let mut buf = [0xFFu8; 8];
|
||||||
let _ = self.nss.set_low();
|
let _ = self.nss.set_low();
|
||||||
let result = self.spi.transfer(&mut buf);
|
let result = self.spi.transfer_in_place(&mut buf);
|
||||||
let _ = self.nss.set_high();
|
let _ = self.nss.set_high();
|
||||||
result?;
|
result?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -282,8 +282,8 @@ impl<SPI: Transfer<u8, Error = E>, NSS: OutputPin, E: fmt::Debug> Adc<SPI, NSS>
|
||||||
let mut addr_buf = [addr];
|
let mut addr_buf = [addr];
|
||||||
|
|
||||||
let _ = self.nss.set_low();
|
let _ = self.nss.set_low();
|
||||||
let result = match self.spi.transfer(&mut addr_buf) {
|
let result = match self.spi.transfer_in_place(&mut addr_buf) {
|
||||||
Ok(_) => self.spi.transfer(reg_data),
|
Ok(_) => self.spi.transfer_in_place(reg_data),
|
||||||
Err(e) => Err(e),
|
Err(e) => Err(e),
|
||||||
};
|
};
|
||||||
let result = match (result, checksum) {
|
let result = match (result, checksum) {
|
||||||
|
@ -291,7 +291,7 @@ impl<SPI: Transfer<u8, Error = E>, NSS: OutputPin, E: fmt::Debug> Adc<SPI, NSS>
|
||||||
Ok(None),
|
Ok(None),
|
||||||
(Ok(_), Some(checksum_out)) => {
|
(Ok(_), Some(checksum_out)) => {
|
||||||
let mut checksum_buf = [checksum_out; 1];
|
let mut checksum_buf = [checksum_out; 1];
|
||||||
match self.spi.transfer(&mut checksum_buf) {
|
match self.spi.transfer_in_place(&mut checksum_buf) {
|
||||||
Ok(_) => Ok(Some(checksum_buf[0])),
|
Ok(_) => Ok(Some(checksum_buf[0])),
|
||||||
Err(e) => Err(e),
|
Err(e) => Err(e),
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
use crate::thermostat::ad5680;
|
use crate::thermostat::ad5680;
|
||||||
|
use core::ptr::addr_of_mut;
|
||||||
use fugit::KilohertzU32;
|
use fugit::KilohertzU32;
|
||||||
use stm32f4xx_hal::{
|
use stm32f4xx_hal::{
|
||||||
adc::{config::{self, AdcConfig}, Adc},
|
adc::{config::{self, AdcConfig}, Adc},
|
||||||
dma::{config::DmaConfig, PeripheralToMemory, Stream2, StreamsTuple, Transfer as DMA_Transfer},
|
dma::{config::DmaConfig, PeripheralToMemory, Stream2, StreamsTuple, Transfer as DMA_Transfer},
|
||||||
gpio::{gpioa::*, gpiob::*, gpioc::*, Alternate, Analog, Output, PushPull},
|
gpio::{gpioa::*, gpiob::*, gpioc::*, Analog, Output, PushPull},
|
||||||
hal::{self, blocking::spi::Transfer, digital::v2::OutputPin},
|
hal::{self, spi::SpiBus, digital::OutputPin},
|
||||||
pac::{ADC1, ADC2, DMA2, SPI1, TIM4, Peripherals, NVIC},
|
pac::{ADC1, ADC2, DMA2, SPI1, TIM4, Peripherals, NVIC},
|
||||||
spi::{NoMiso, Spi, TransferModeNormal},
|
spi::Spi,
|
||||||
timer::pwm::PwmChannel,
|
timer::pwm::PwmChannel,
|
||||||
interrupt
|
interrupt
|
||||||
};
|
};
|
||||||
|
@ -20,7 +21,7 @@ use uom::si::{
|
||||||
pub const PWM_FREQ_KHZ: KilohertzU32 = KilohertzU32::from_raw(20);
|
pub const PWM_FREQ_KHZ: KilohertzU32 = KilohertzU32::from_raw(20);
|
||||||
|
|
||||||
pub trait ChannelPins {
|
pub trait ChannelPins {
|
||||||
type DacSpi: Transfer<u8>;
|
type DacSpi: SpiBus<u8>;
|
||||||
type DacSync: OutputPin;
|
type DacSync: OutputPin;
|
||||||
type ShdnPin: OutputPin;
|
type ShdnPin: OutputPin;
|
||||||
type VRefPin;
|
type VRefPin;
|
||||||
|
@ -71,7 +72,7 @@ pub struct MAX1968PinSet<C: ChannelPins> {
|
||||||
pub max_i_neg: C::MAXINegPin,
|
pub max_i_neg: C::MAXINegPin,
|
||||||
}
|
}
|
||||||
|
|
||||||
type DacSpi = Spi<SPI1, (PB3<Alternate<5>>, NoMiso, PB5<Alternate<5>>), TransferModeNormal>;
|
type DacSpi = Spi<SPI1>;
|
||||||
type DacSync = PB4<Output<PushPull>>;
|
type DacSync = PB4<Output<PushPull>>;
|
||||||
|
|
||||||
static mut DMA_TRANSFER_COMPLETE: bool = true;
|
static mut DMA_TRANSFER_COMPLETE: bool = true;
|
||||||
|
@ -157,7 +158,7 @@ impl MAX1968 {
|
||||||
let dma = StreamsTuple::new(dma2);
|
let dma = StreamsTuple::new(dma2);
|
||||||
let dma_adc : DMA_Transfer<Stream2<DMA2>, 1, Adc<ADC2>, PeripheralToMemory, &'static mut [u16; 16]>;
|
let dma_adc : DMA_Transfer<Stream2<DMA2>, 1, Adc<ADC2>, PeripheralToMemory, &'static mut [u16; 16]>;
|
||||||
unsafe {
|
unsafe {
|
||||||
dma_adc = DMA_Transfer::init_peripheral_to_memory(dma.2, pins_adc2, &mut ADC2_FIRST_BUFFER, None, dma_config);
|
dma_adc = DMA_Transfer::init_peripheral_to_memory(dma.2, pins_adc2, addr_of_mut!(ADC2_FIRST_BUFFER).as_mut().unwrap(), None, dma_config);
|
||||||
NVIC::unmask(interrupt::DMA2_STREAM2);
|
NVIC::unmask(interrupt::DMA2_STREAM2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,7 +186,7 @@ impl MAX1968 {
|
||||||
let buffer: &[u16; 16];
|
let buffer: &[u16; 16];
|
||||||
unsafe {
|
unsafe {
|
||||||
(buffer, _) = self.dma_adc
|
(buffer, _) = self.dma_adc
|
||||||
.next_transfer(&mut ADC2_LOCAL_BUFFER)
|
.next_transfer(addr_of_mut!(ADC2_LOCAL_BUFFER).as_mut().unwrap())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,21 +285,34 @@ impl MAX1968 {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_pwm(&mut self, pwm_pin: PwmPinsEnum, duty: f64, max_duty: f64) -> f64 {
|
pub fn set_pwm(&mut self, pwm_pin: PwmPinsEnum, duty: f64, max_duty: f64) -> f64 {
|
||||||
fn set<P: hal::PwmPin<Duty = u16>>(pin: &mut P, duty: f64) -> f64 {
|
fn duty_cycle_value(duty_cycle: f64, duty_cycle_limit: f64, max_value: u16) -> u16 {
|
||||||
let max = pin.get_max_duty();
|
((duty_cycle.min(duty_cycle_limit) * (max_value as f64)) as u16).min(max_value)
|
||||||
let value = ((duty * (max as f64)) as u16).min(max);
|
|
||||||
pin.set_duty(value);
|
|
||||||
pin.enable();
|
|
||||||
value as f64 / (max as f64)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let duty = duty.min(max_duty);
|
let value: u16;
|
||||||
|
let max_value: u16;
|
||||||
match pwm_pin {
|
match pwm_pin {
|
||||||
PwmPinsEnum::MaxV => set(&mut self.phy.max_v, duty),
|
PwmPinsEnum::MaxV => {
|
||||||
PwmPinsEnum::MaxPosI => set(&mut self.phy.max_i_pos, duty),
|
self.phy.max_v.enable();
|
||||||
PwmPinsEnum::MaxNegI => set(&mut self.phy.max_i_neg, duty),
|
max_value = self.phy.max_v.get_max_duty();
|
||||||
|
value = duty_cycle_value(duty, max_duty, max_value);
|
||||||
|
self.phy.max_v.set_duty(value);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
PwmPinsEnum::MaxPosI => {
|
||||||
|
self.phy.max_i_pos.enable();
|
||||||
|
max_value = self.phy.max_i_pos.get_max_duty();
|
||||||
|
value = duty_cycle_value(duty, max_duty, max_value);
|
||||||
|
self.phy.max_i_pos.set_duty(value);
|
||||||
|
}
|
||||||
|
PwmPinsEnum::MaxNegI => {
|
||||||
|
self.phy.max_i_neg.enable();
|
||||||
|
max_value = self.phy.max_i_neg.get_max_duty();
|
||||||
|
value = duty_cycle_value(duty, max_duty, max_value);
|
||||||
|
self.phy.max_i_neg.set_duty(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (value as f64) / (max_value as f64);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue